1

我有这个漂亮的函数,它遍历集合中的模型以获取属性和值。如果找到该值,则返回 true。

在浏览了很多文档之后,我仍然对如何正确遍历集合以及如何搜索它感到有些困惑。由于 underscorejs(在我的情况下为 lodash)被连接到主干中,我确实使用 .each 遍历集合

我没有在后面放一个 else ,if (model.get(attribute)===value)因为它会在遍历整个集合之前返回 false 。回调函数听起来像不必要的复杂性 - 但也许我错了(我几个月前开始使用 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(又名) ,除了它需要一个函数参数作为其谓词,而不是键/值:anysearch

如果列表中的任何值通过迭代器真值测试,则返回 true。如果找到真正的元素,则短路并停止遍历列表。

使用 this 的实现更直接一些:

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