2013-10-20 77 views
7

我有以下值的數組:是否可以使用下劃線按多個值過濾數組值?

[ 
    { 
    id: 1, 
    field: 'map' 
    }, 
    { 
    id: 2, 
    field: 'dog' 
    }, 
    { 
    id: 3, 
    field: 'map' 
    } 
] 

我需要找出元素與字段等於dogmap。我知道我可以使用_.filter方法並傳遞一個迭代器函數,但我想知道的是是否有更好的解決方案來解決這個問題,我可以通過搜索字段和可能的值。有人可以提供更好的方式嗎?

編輯:

我可以用下面的辦法:

_.where(array, {field: 'dog'}) 

但在這裏如果你想創建一個功能我可以只檢查一個條款

回答

15
_.filter(data, function(item){ return item.field === 'map' || item.field === 'dog'; }) 

這接受fieldvalues它可以看起來像這樣:

function filter(data, field, values) { 
    _.filter(data, function(item){ return _.contains(values, item[field]); }) 
} 
+0

問題是不完全清楚,但他真正要問的問題是如何使其更具可定製性/通用性:「我知道我可以使用_.filter方法並傳遞迭代器函數,但是**有更好的解決方案,我可以通過搜索字段和可能的值**?」 –

+1

是的,它是第二個片段,只是搞砸了標記 – vkurchatkin

+0

正是我需要的。 – Gamak

6

只是通過篩選條件爲_.filter()第三個參數,然後迭代器設置爲contextthis):

var bar = _.filter(foo, function (i) { 
       return this.keys.indexOf(i.field) > -1; 
      }, { 
       "keys": ["map", "dog"] // values to look for 
      }); 

example