使用Undercore.js查询数组

Query Array with Underscore.js

本文关键字:数组 查询 js Undercore 使用      更新时间:2023-09-26

我有两个JavaScript数组。我的第一个数组是这样的:

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的团队数组?我正试图用undercore.js来做这件事。目前,我有:

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

然而,这不起作用。我做错了什么?

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

对此,我将使用两步流程。在循环中使用_.contains是一个坏习惯,您可以通过使用_.object:预计算一个简单的查找表来跳过它

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

由于selected中的所有值都是真的,我们可以说if(select_has[id])之类的话来看看id是否在selected中。

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

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

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