javascript - найти ключ вложенного объекта по его значению - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь найти ключ объекта, который содержит мое значение.

Есть мой объект:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}

И теперь я пытаюсь получить ключ объекта отзначение "title2"

function obk (obj, val) {
  const key = Object.keys(obj).find(key => obj[key] === val);
  return key
}

console.log(obk(obj, "title2"))

Вывод:

undefined

Желаемый вывод:

post2

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вы можете использовать массив карт:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}
//console.log(obj);
function obk (obj, val) {
    var result = "";
    Object.keys(obj).map(key => {
        if(obj[key].title === val)
            result = key;
    });
    return result;
}

console.log(obk(obj, "title2"));

Или используйте поиск по массиву для оптимизации функции поиска:

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}
//console.log(obj);
function obk (obj, val) {
    result = Object.keys(obj).find(key => {
        if(obj[key].title === val)
            return key;
    });
    return result;
}

console.log(obk(obj, "title1"));
0 голосов
/ 27 сентября 2018

У вас это есть, просто добавьте obj[key].title === val, как упомянул Крис Дж.

Вот один лайнер ES6, который возвращает массив всех совпадений.

var obj = {}

obj["post1"] = {
    "title":    "title1",
    "subtitle": "subtitle1"
}

obj["post2"] = {
    "title":    "title2",
    "subtitle": "subtitle2"
}

const filterByTitle = (obj, title) => 
  Object.values(obj).filter(o => o.title === title);

console.log(filterByTitle(obj, 'title1'))
0 голосов
/ 27 сентября 2018

Вы должны получить доступ к подразделу объекта:

 function obk (obj, prop, val) {
   return Object.keys(obj).find(key => obj[key][prop] === val);
 }

 console.log(obk(obj, "title", "title2"));

Или вы можете искать все значения подобъекта:

 function obk (obj, val) {
   return Object.keys(obj).find(key => Object.values( obj[key] ).includes(val)); 
 }

 console.log(obk(obj, "title2"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...