0

私のアプリはアイテムのリストを取得し、それぞれに「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);
    });
};

この方法は、私にはかなり醜く非効率的です。より良い方法はありますか?

4

2 に答える 2

0
_.each(items, function (x) {
    if (x.state === 'foo') {
        var key = ['bar', x.id].join('');
        if ( key in items ) {
            delete items[key];
        }
    }       
});

このようなものは近いはずです。少し修正する必要があるかもしれませんが、その単一のパスです

于 2013-12-04T23:00:14.320 に答える