2013-12-16 31 views
0

我有两个JavaScript数组。我的第一个阵列看起来像这样:查询数组与Underscore.js

teams: [ 
    { id: 1, name:'Flyers' }, 
    { id: 2, name:'Hawks' }, 
    { id: 3, name:'Bats' }, 
    { id: 4, name:'Ninjas' }, 
    { id: 5, name:'Seals' } 
]; 

selected: ["1", "3", "4"]; 

如何返回选定ID中的球队阵列?我试图用underscore.js做到这一点目前,我有:

var selected = _.filter(teams, function (team) { 
    return _.contains(selected, team.id); 
    }); 

但是,这是行不通的。我究竟做错了什么?

回答

1

由于team.id是一个数字,它不会出现在字符串数组中。

0

我会为此使用两个步骤的过程。使用_.contains一个循环内是个坏习惯,你可以通过预先计算使用简单的查找表跳过_.object

var selected_has = _(selected).object(selected); 

由于selected所有值都truthy,我们可以说这样的话if(select_has[id]),看是否id是在selected

var matches = _(teams).filter(function(o) { 
    return selected_has[o.id] 
}); 

当然,您为类型转换支付了一点点,但您获得了表现力。

演示:http://jsfiddle.net/ambiguous/b4XyU/