2015-09-14 95 views
1

我试图用下划线找到数组中有一个具有一定条件的子对象。让说,这是我的数组:下划线查找嵌套对象

"array": [ 
    { 
    "user": { 
     "profileIcon": 913, 
     "id": 62019870 
    }, 
    "count": 1 
    }, 
    { 
    "user": { 
     "profileIcon": 770, 
     "id": 32558522 
    }, 
    "count": 2 
    } 
] 

现在我只想返回已USER.ID对象:62019870. 这是我到目前为止的代码,但它返回一个空数组:

var arr = _.filter(array, function(obj) { 
       return _.findWhere(obj.user, {id: 62019870}); 
      }); 

回答

3

findWhere函数在数组上,而不是在对象上。对于你的情况,你可以简单地做

console.log(_.filter(array, function(obj) { 
    return obj.user.id === 62019870; 
})); 
// [ { user: { profileIcon: 913, id: 62019870 }, count: 1 } ] 

如果你的环境支持,原生Array.prototype.filter那么你可以做同样的,没有下划线,这样

array.filter(function(obj) { 
    return obj.user.id === 62019870; 
}); 

如果你的环境支持ECMA Script 2015's Arrow functions,那么你可以写得相同,更简洁,像这样

array.filter(obj => obj.user.id === 62019870); 
+0

我会更喜欢@alexreardon的方式,如果我不需要担心IE8它是'native'过滤器。 – Mritunjay

+0

@alexreardon谢谢,在答案中也包含了这个建议。 – thefourtheye