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) 

option[key] を grep しますが、彼を機能させることができませんでした。最後に、ここに示すように別のルートに行きました。

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 に答える