11

我正在尝试使用 grep 来过滤 Javascript 对象,如下所示:

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

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

我得到的结果是空的,我猜这与封闭对象的非顺序键有关。任何想法如何解决这一问题?

更新

我尝试了几种不同的 grep 方法,包括使用

for (key in option) 

grep option[key] 但我无法让他工作。最后我走了一条不同的路线,如下所示:

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

2 回答 2

22

你不能对一个对象进行grep并期望得到一个理智的结果。但是,您可以grep遍历数组,因此我们只需要使用以下命令获取键列表Object.keys

$.grep(Object.keys(options), function (k) { return options[k].group == 2; })
//=> ["5"]
于 2012-11-15T06:47:03.247 回答
1

这是一个过滤器函数,用于过滤数组和对象:

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];
    });
  }
}
于 2015-08-06T14:00:22.187 回答