按数组过滤数组 Underscore JS
Filter array by array Underscore JS
我正在尝试通过他们的 TeamID 过滤掉 "Players",这是一个数组,基于多 select 中的 selected 复选框(Bootstrap Multiselect to be precise ).
我让它工作了,但要求改变了,玩家可以在多个团队中。 (对不起,我没有 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());
});
这应该有效:
var temp = [];
_.each(selected, function(i){
temp.push(_.filter(allPlayers, function(obj){
return obj.TeamID.indexOf(i) !== -1;
}));
});
与其比较 TeamID 是否等于所选 ID,不如检查 TeamID 数组是否包含所选 ID。
如果使用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
编辑:添加了多对多搜索。
我正在尝试通过他们的 TeamID 过滤掉 "Players",这是一个数组,基于多 select 中的 selected 复选框(Bootstrap Multiselect to be precise ).
我让它工作了,但要求改变了,玩家可以在多个团队中。 (对不起,我没有 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());
});
这应该有效:
var temp = [];
_.each(selected, function(i){
temp.push(_.filter(allPlayers, function(obj){
return obj.TeamID.indexOf(i) !== -1;
}));
});
与其比较 TeamID 是否等于所选 ID,不如检查 TeamID 数组是否包含所选 ID。
如果使用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
编辑:添加了多对多搜索。