Подтвердить что ты не робот

.grep на объекте JSON

Я пытаюсь использовать grep для фильтрации Javascript-объекта так:

var options = { 
    5: {
        group: "2",
        title: "foo"
    },
    9: {
        group: "1",
        title: "bar"
    }
};

var groups = $.grep(options, function(e){ return e.group == 2 });

Я получаю пустые результаты, и я предполагаю, что это имеет какое-то отношение к непоследовательным клавишам закрывающего объекта. Любые идеи, как это исправить?

Update

Я попробовал несколько разных методов grep, включая использование

for (key in option) 

чтобы grep по опции [key], но я не мог заставить его работать. В итоге я пошел другим путем, как показано здесь:

var option_ids = new Array();
for (key in option) {
    if ( option[key]['group'] == 2 ) option_ids.push(option[key]['id']);
}
4b9b3361

Ответ 1

Вы не можете grep по объекту и ожидать разумного результата. Однако вы можете grep по массиву, поэтому нам просто нужно получить список ключей с Object.keys:

$.grep(Object.keys(options), function (k) { return options[k].group == 2; })
//=> ["5"]

Ответ 2

это функция фильтра для фильтрации как массивов, так и объектов:

function filter(target, func) {
  if (target instanceof Array) {
    return target.filter(func);
  } else {
    var result = {};
    $.each(Object.keys(target).filter(function (value) {
      return func.call(null, target[value]);
    }), function (i, value) {
      result[value] = target[value];
    });
  }
}