私のアプリはアイテムのリストを取得し、それぞれに「foo」、「bar」、「blah」などの値を持つことができる状態プロパティがあります。リストには、1 つが foo であり、他はバーです。その場合、foos を保持し、bars を破棄したいと考えています。
私のフィルターは、リストに対して 2 つのパスを作成します。最初のパスでfooが検出されると、" bar " と id 値で構成される文字列をブラックリスト配列にプッシュします。次に、2 回目のパスでキーを再度生成し、ブラックリストにある項目を除外します。
var myFilter = function (items) {
var blacklist = [];
_.each(items, function (x) {
if (x.state === 'foo') {
blacklist.push(['bar', x.id].join(''));
}
});
return _.filter(items, function (x) {
var key = [x.state, x.id].join('');
return !_.contains(blacklist, key);
});
};
この方法は、私にはかなり醜く非効率的です。より良い方法はありますか?