2015-05-04 37 views
1

下面是测试数组:如何使用underscore.js过滤器得到结果?

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 
}]; 

而且我想要得到的结果是这样一个数组:

结果= [“亚历克斯”,“汤姆”];

结果数组包含团队中“checked”属性等于true的所有项目。 我尝试使用underscore.js filter得到结果,但我无法得到正确的结果。 如果您有更好的解决方案,请告诉我。 这是我的代码:使用滤波多维阵列

_.filter(test, function(team) { 
_.filter(team, function(worker){ 
    if(worker.checked) 
     return worker.name; 
});}); 
+3

请发表您的代码,以便我们可以帮助你。 – Kyle

+0

添加实际的过滤器代码.... –

+0

谢谢。我的代码已更新。 – 0n1yDream

回答

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"] 
+0

非常感谢!我只是让事情变得比必要更难。 – 0n1yDream

+1

你可以使用普通的JavaScript来处理所有事情。如何使代码具有可读性,可重用性和表达性是最难的部分。不要重新发明轮子。 'var result = _.chain(test).pluck('team')。flatten()。filter({checked:true})。value();' –

-1

的一种方式是通过使用filterany

_.filter(test, function(team) { 
    return _.any(team.team, function(player) { 
     return player.checked; 
    }); 
}); 
+0

这个返回整个测试数组 – dannyshaw

4

这里是你如何在这两个做下划线和lodash

Underscore jsfiddle

var result = _.chain(test).pluck('team').flatten().filter({checked:true}).value(); 

Lodash jsfiddle

var result = _(test).pluck('team').flatten().filter({checked:true}).value(); 

将团队数组放在一起,压平它们,以便拥有嵌套数组,过滤属性,结果是包含名称的对象并选中为真。如果你想要的名字,做另一个采摘。

下面是一个underscorejs版采用了shorter filter and just giving back the names

var result = _.chain(test).pluck('team').flatten().filter('checked').pluck('name').value(); 
// ["Alex", "Tom"] 
+0

美丽。不知道下划线允许在过滤器(和许多其他函数)中使用属性名称,并将其封装在_.property调用中。 –