Javascript Backbone.js:如何通过模型ID数组过滤对象集合?

Javascript Backbone.js:如何通过模型ID数组过滤对象集合?,javascript,collections,filter,backbone.js,underscore.js,Javascript,Collections,Filter,Backbone.js,Underscore.js,我有一个骨干。收藏全是模型;假设模型是汽车。这个系列是一个非常棒的汽车大列表。我希望能够从列表中选择一些特定的汽车ID,然后能够从该集合中仅获取这些选定的汽车对象 我下面的代码块不工作;我确信有一种方法可以用Backbone.js/underline.js做到这一点……我对Backbone/underline也很熟悉 CarList = Backbone.Collection.extend({ model: Car, filterWithIds: function(ids) {

我有一个
骨干。收藏
全是模型;假设模型是
汽车
。这个系列是一个非常棒的
汽车大列表
。我希望能够从列表中选择一些特定的汽车ID,然后能够从该集合中仅获取这些选定的汽车对象

我下面的代码块不工作;我确信有一种方法可以用Backbone.js/underline.js做到这一点……我对Backbone/underline也很熟悉

CarList = Backbone.Collection.extend({
    model: Car,
    filterWithIds: function(ids) {
        return this.filter(function(aCar) { return _.contains(ids, car.id); }
    }
});

有什么建议吗?

好的,我想我找到了。它接近于我原来的代码块,但是更新的
filterWithIds
函数就在这里

filterWithIds: function(ids) {
    return _(this.models.filter(function(c) { return _.contains(ids, c.id); }));
}
对于那些跟随CoffeeScript的人(我是),这里是CoffeeScript的版本

filterWithIds: (ids) -> _(@models.filter (c) -> _.contains ids, c.id)

这是我的答案;有代码气味吗?

您可以尝试使用id中的条件
c.id
,该条件使coffeescript变成一个for循环,对照c.id检查每个id。由于发布了此答案,
include
被重命名为
contains
。传递给
this.filter
的匿名函数缺少返回语句。与其他一些语言(如Ruby)不同,JavaScript不使用函数中的最后一个表达式作为默认返回值。(另外,将此
分配给
coll
的行是多余的。)你说得对,尼尔……我在翻译CoffeeScript中的代码时,先看了一下,然后把它忘了;为了简化我的代码,我不小心把多余的一行留在了里面。我已经修复了我的代码示例。