1

属性と値のコレクション内のモデルをトラバースするこの気の利いた関数があります。値が見つかった場合は、true を返します。

多くのドキュメントを調べた後でも、コレクションを適切にトラバースする方法と検索する方法について少し混乱しています。underscorejs(私の場合はlodash)がバックボーンにフックされているので、.eachでコレクションをトラバースします

if (model.get(attribute)===value)コレクション全体をトラバースする前に false を返すため、後ろに else を付けませんでした。コールバック関数は不要な複雑さのように聞こえますが、間違っているかもしれません (数か月前に JS を使い始めました)

ヒントやより良い解決策をいただければ幸いです;-)説明付き。前もって感謝します。

私はrequirejsを使用しているため、_,Bacbkoneを渡します...

コレクションは次のようになります。

function (_, Backbone, AppModels) {

    var QueriesCollection = Backbone.Collection.extend({
        model : AppModels.QueryModel,

        search: function (attribute, value) {
            var found = false;
            this.each(function (model) {
                if (model.get(attribute)===value) {
                    found = true;
                }
            });
            return found;
        }
    });

    return {
        QueriesCollection: QueriesCollection
    };
});
4

1 に答える 1

6

アンダースコアsome(aka ) を使用することもできます。これは、キー/値の代わりに、述語として使用する関数引数を取ることを除いてany、関数とほぼ同じです。search

リスト内のいずれかの値が反復子の真偽テストに合格した場合、true を返します。真の要素が見つかった場合、短絡してリストの走査を停止します。

これを使用する実装は、もう少し直接的です。

search: function (attribute, value) {
    return this.some(function(x) { 
        return x.get(attribute) === value; 
    });
}
于 2012-12-09T00:41:23.950 に答える