这是测试数组:
var test = [
{
"id": 1,
"team": [
{
"name": "Alex",
"age": 27,
"checked": true
},
{
"name": "Bob",
"age": 35,
"checked": false
}
],
"checked": true
},
{
"id": "2",
"team": [
{
"name": "Jack",
"age": 37,
"checked": false
},
{
"name": "Tom",
"age": 29,
"checked": true
}
],
"checked": true
}];
我想得到的结果是这样的数组:
result = [“Alex”,“Tom”];
结果数组包含团队中“checked”属性等于true的所有项。 我尝试使用underscore.js filter获得结果,但我无法得到正确的结果。 如果您有更好的解决方案,请告诉我。 这是我的代码:
_.filter(test, function(team) {
_.filter(team, function(worker){
if(worker.checked)
return worker.name;
});});
答案 0 :(得分:4)
以下是如何在下划线和lodash中执行此操作:
var result = _.chain(test).pluck('team').flatten().filter({checked:true}).value();
var result = _(test).pluck('team').flatten().filter({checked:true}).value();
将团队数组放在一起,展平它们,以便拥有嵌套数组,对属性进行过滤,结果是包含名称的对象,并检查为true。如果你只想要这些名字,可以再做一次。
这是一个带有shorter filter and just giving back the names:
的下划线版本var result = _.chain(test).pluck('team').flatten().filter('checked').pluck('name').value();
// ["Alex", "Tom"]
答案 1 :(得分:0)
您只需使用forEach
function来处理此
var test = [...];
var result = [];
test.forEach(function(item) {
item.team.forEach(function(worker) {
if(worker.checked) {
result.push(worker.name);
}
})
})
console.log(result)
//Return ["Alex","Tom"]
答案 2 :(得分:-1)
One way to use filtering for multidimentional array is by using filter
and any
.
_.filter(test, function(team) {
return _.any(team.team, function(player) {
return player.checked;
});
});