Учитывая объект JSON, как найти элемент на основе ключа? - PullRequest
3 голосов
/ 15 апреля 2011

Учитывая объект JSON, такой как:

var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};

Как я могу сделать что-то вроде этого:

datagood = data.where(value == 55)

Возможно ли что-то подобное с JS / jQuery? Спасибо

Ответы [ 4 ]

13 голосов
/ 15 апреля 2011

Функция jQuery grep позволяет фильтровать массив:

var datagood = $.grep(data.items, function (item) {
    return item.value == 55;
});

Если вам нужны более мощные утилиты, взгляните на этот вопрос SO на JS LINQбиблиотеки .

В качестве альтернативы underscore.js также полезно для манипулирования массивами / объектами.

4 голосов
/ 15 апреля 2011
3 голосов
/ 28 декабря 2014

Вы можете использовать функции Lo-Dash или Underscore библиотеки _.where () и _.find ():

var res1 = _.where(data.items,{value:"55"});
var res2 = _.find(data.items,{value:"55"});

Разница между этими двумя функциями в том, что _.where () возвращает все сопоставленные записи, а _.find () - только первую запись.

var data = {items: [
    {value: "21", name: "Mick Jagger"},
    {value: "43", name: "Johnny Storm"},
    {value: "46", name: "Richard Hatch"},
    {value: "54", name: "Kelly Slater"},
    {value: "55", name: "Rudy Hamilton"},
    {value: "79", name: "Michael Jordan"},
    {value: "55", name: "Another Rudy Hamilton"}
]};

var res1 = _.where(data.items,{value:"55"});
var res2 = _.find(data.items,{value:"55"});

document.write('-.where(): ',JSON.stringify(res1),'<br>');
document.write('-.find(): ',JSON.stringify(res2),'<br>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
2 голосов
/ 15 апреля 2011
var data = {items: [
{value: "21", name: "Mick Jagger"},
{value: "43", name: "Johnny Storm"},
{value: "46", name: "Richard Hatch"},
{value: "54", name: "Kelly Slater"},
{value: "55", name: "Rudy Hamilton"},
{value: "79", name: "Michael Jordan"}
]};

// using underscore.js http://documentcloud.github.com/underscore/
var t = _(data.items).find(function(x) {
  return x.value == 55;
});

JSON.stringify(t) ; //# => {"value":"55","name":"Rudy Hamilton"}

// using pure javascript
var find = function(items, f) {
  for (var i=0; i < items.length; i++) {
    var item = items[i];
    if (f(item)) return item;
  };
}

t = find(data.items, function(x) {return x.value == "55";});

JSON.stringify(t) ; //# => {"value":"55","name":"Rudy Hamilton"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...