Поиск в массиве объектов JSON - PullRequest
3 голосов
/ 21 июня 2011

Я не уверен, как выполнить следующее, учитывая этот массив объектов JSON:

var stuff = [
  {
    'Address' : '123 Street',
    'Name'    : 'From'
  },
  {
    'Address' : '456 Avenue',
    'Name'    : 'To'
  }
]

Итак, я хотел бы иметь возможность запрашивать этот массив объектов на основе одного из свойств, в данном случае «Имя», и возвращать весь объект, соответствующий запросу.

Есть ли способ сделать это с помощью jquery или просто обычного javascript?

Например, я хотел бы вернуть весь объект, где Name === 'From'

Ответы [ 5 ]

5 голосов
/ 21 июня 2011
function findStuff(jsonobject, propertyToFind, valueToFind)
{
    for (var i = 0; i < jsonobject.length; i++) {
        if (jsonobject[i][propertyToFind] === valueToFind)
           return jsonobject[i];
    }
    return null;
}
1 голос
/ 21 июня 2011
$.each('stuff', function(key,value)
{
    if (key == 'Name' && value == 'From')
    {
         alert('got it!');
    }
});
1 голос
/ 21 июня 2011
function findByName(ary,name){
    for (var a = 0; a < ary.length; a++){
        if (ary[a].Name == name)
            return stuff[a];
    }
    return {};
}

var match = findByName(stuff,'From');

Используйте цикл, чтобы пройти объекты.Используйте .Name off объекта, чтобы прочитать значение свойства объекта JSON.

1 голос
/ 21 июня 2011
for(var i=0; i<stuff.length; i++){
    var item = stuff[i];
    if(item.Name=='From')
       ....
}
0 голосов
/ 07 января 2014

Вместо написания пользовательских функций вы можете использовать эту библиотеку JS - DefiantJS (defiantjs.com).Который расширяет глобальный объект JSON методом «поиск».С помощью этого метода вы можете искать структуру JSON с помощью выражений XPath, и она будет возвращать массив с совпадениями (пустой массив, если совпадений не найдено).

    var stuff = [
       {
          "Address": "123 Street",
          "Name": "From"
       },
       {
          "Address": "456 Avenue",
          "Name": "To"
       }
    ],
    res = JSON.search( stuff, '//*[Name = "From"]' );

console.log( res[0].Address );
// 123 Street

Вот рабочая скрипка:http://jsfiddle.net/hbi99/4H57C/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...