2015-05-04 35 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調用中。 –