Как достать из массива объект, зная значение одного из его свойств?

Есть такой ответ от сервера в ВК:

profiles: [{
id: 2314852,
first_name: 'Irina',
last_name: 'Denezhkina',
sex: 1,
screen_name: 'apiwoman',
photo_50: 'http://cs424219.v...0/GRAeOai7ksA.jpg',
photo_100: 'http://cs424219.v...f/9cNdgOBsLRw.jpg',
online: 1
}, {
id: 54986442,
first_name: 'Ivan',
last_name: 'Gusev',
sex: 2,
screen_name: 'emc2',
photo_50: 'http://cs614728.v...6/3R-MZoMP4A8.jpg',
photo_100: 'http://cs614728.v...5/pXtfGrqJMTU.jpg',
online: 1
}],

Как зная id (2314852, например), получить соответствующий объект?
  • Вопрос задан
  • 226 просмотров
Решения вопроса 2
k12th
@k12th
console.log(`You're pulling my leg, right?`);
«Из коробки» нет, придется либо писать какую-то обвязку, либо брать готовые. Если взять, например, underscore, то можно так:
_.findWhere(list, {id: 2314852})
Есть и более мощные решения, позволяющие делать Mongo-подобные запросы к массиву объектов.

Если писать обвязку самому, то можно делать как-нибудь так:
function getById (list, id) {
    return list.filter(function (item) {
        return item.id === id
    })[0]
}

Ну и так далее, в зависимости от того, что именно и как именно нужно искать. Array#filter, Array#some, Array#indexOf, Array#reduce вам в помощь.
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
function findWhere(json, key, val) {
  for (var i = 0, length = json.length; i < length; i++) {
    if (json[i][key] == val) return json[i];
  }
}

findWhere(myJson.profiles, "id", "2314852");
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
STJ
@STJ
Front-end developer
У контактика - REST.
А если у вас статический json, то можно написать некую обертку для работы так, как вы хотите.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
JSONPath - XPath for JSON
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы