我正在尝试根据多选中选定的复选框( Bootstrap Multiselect to be precise ),通过 TeamID(一个数组)过滤掉“玩家”。
我可以正常工作,但要求发生了变化,玩家可以在多个团队中。 (抱歉,我没有 JSFiddle/CodePen,Bootstrap Multiselect 没有 CDN,而且它们都运行得不好)
这就是我为各个团队提供的有效方法。
var temp = [];
_.each(selected, function(i){
temp.push(_.filter(allPlayers, function(obj){
return obj.TeamID == i;
}));
});
但是我需要按数组过滤数组。
JSON
var allPlayers = [{
"TeamID": [100001, 100002],
"PlayerID": 1,
"PlayerName" : "Pete Tong"
},
{
"TeamID": [100001, 100002],
"PlayerID": 2,
"PlayerName" : "Will Chamberlain"
},
{
"TeamID": [100002, 100003],
"PlayerID": 3,
"PlayerName" : "Jane Doe"
},
{
"TeamID": [100004],
"PlayerID": 4,
"PlayerName" : "John Doe"
}];
我已经尝试过了 Filter two different structured arrays underscore js但它似乎不适用于我的解决方案。
选定的数组
var teams = $('#team-list option:selected');
var selected = [];
$(teams).each(function(index, team){
selected.push($(this).val());
});
最佳答案
如果您使用filter(),则不需要额外的外部变量:
var allPlayers = [{
"TeamID": [100001, 100002],
"PlayerID": 1,
"PlayerName" : "Pete Tong"
},
{
"TeamID": [100001, 100002],
"PlayerID": 2,
"PlayerName" : "Will Chamberlain"
},
{
"TeamID": [100002, 100003],
"PlayerID": 3,
"PlayerName" : "Jane Doe"
},
{
"TeamID": [100004],
"PlayerID": 4,
"PlayerName" : "John Doe"
}];
var selected=[100003, 100004]; // change this
var filtered= allPlayers.filter(function(a){
return selected.some(function(team){
return a.TeamID.indexOf(team)!==-1;
});
});
alert(JSON.stringify(filtered, null, "\t"));
演示:http://pagedemos.com/qejbsz722hs3/2
编辑:添加了多对多搜索。
关于javascript - 按数组过滤数组 Underscore JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31581667/