Поиск элемента в объекте javascript на основе свойств элемента - PullRequest
0 голосов
/ 01 мая 2018

Скажем, у меня есть такой объект:

var things = { 
    "First Item": {"name": "First Item", "url":"firstitem" },
    "Second Item": {"name": "Second Item", "url":"seconditem" }
};

Я хочу иметь возможность проверить, имеет ли какое-либо из значений объекта значение url «firstitem», и, если это так, получить все значения, связанные с этим элементом (для «name» и «url»). Как можно было бы сделать цикл для достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Есть 2 способа обойти это. Вы можете использовать метод foreach:

for (var key in things) {
    things[key].url; // do thing with this
}

Или метод Object.keys

Object.keys(things); // Returns an array of ["First Item", "Second Item"]

Я предпочитаю второе, потому что для вашего случая использования вы можете сделать это:

Object.keys(things).find(elem => things[elem].url === "seconditem");

Это вернет undefined, если он не найден, или в случае выше, он вернет {"name": "Second Item", "url": "seconditem" }
Вы также можете использовать findIndex вместо find, что даст вам его индекс в массиве, возвращаемом Object.keys()

Для более подробной информации:

0 голосов
/ 01 мая 2018
var things = { 
    "First Item": {"name": "First Item", "url":"firstitem" },
    "Second Item": {"name": "Second Item", "url":"seconditem" }
};

Object.keys(things).
    filter(k => things[k].url === "firstitem").
    map(k => things[k])
// [ { name: 'First Item', url: 'firstitem' } ]
...