2016-03-18 44 views
0

我有一個對象列表,我試圖使用下劃線findwhere函數來查找列表中的一個對象,其中一個鍵和另一個對象作爲其值。我試過這樣做,但得到一個未定義的值。所以我的問題是強調findwhere可用來查找具有另一個對象的值的鍵的對象,而不是字符串或數字。示例代碼。Lodash findWhere with Object作爲鍵的值

var a = [ 
    {channel: {aa: "1", bb: "2"}, id: 233332}, 
    {channel: {aa: "3", bb: "4"}, id: 822211} 
] 

var b = {channel: {aa: "1", bb: "2"}, id: 233332} 

_.findWhere(A,B)應該返回{信道:{AA: 「1」,BB: 「2」},ID:233332}其中它爲這個陣列的對象具有兩個密鑰,但與一個更多的對象,即一個擁有更多的鍵和值,它似乎並沒有工作,是否有findWhere或我沒有考慮過的任何事情?

+0

所以lodash或下劃線?因爲在某些情況下它們是不同的。 –

+0

其lodash版本3.1 – lboyel

回答

0

.findWhere方法匹配來自對象b的所有屬性。如果添加額外的屬性,則匹配將失敗。但是什麼你可以做的是以下幾點:

_.findWhere(a, _.pick(b, ['channel', 'id'])); 

的_.pick將創建一個新的對象,只有那也是你的陣列中提供這些鍵/值對。

4

_.find在lodash v4.0.0中不推薦使用,所以最好使用_.find和_.matches。

lodash _.matches

var a = [ 
    {channel: {aa: "3", bb: "4"}, id: 822211}, 
    {channel: {aa: "1", bb: "2"}, id: 233332} 
]; 

var b = {channel: {aa: "1", bb: "2"}, id: 233332, desc:"Hello"}; 
_.find(a, function(n){ 
    if(_.matches(n)(b)){ 
     return n; 
    } 
}); 

jsFiddle with lodash v3.1.0

現在如果你想其他方式

var a = [ 
    {channel: {aa: "3", bb: "4"}, id: 822211, desc:"Hello"}, 
    {channel: {aa: "1", bb: "2"}, id: 233332, desc:"Hello"} 
]; 

var b = {channel: {aa: "1", bb: "2"}, id: 233332}; 
_.find(a, function(n){ 
    if(_.matches(b)(n)){ 
     return n; 
    } 
}); 

jsFiddle with lodash v3.1.0