2016-03-04 106 views
1

我试图利用lodash却找不到一个javascript函数,将采取这样的:Lodash的Javascript返回元素的值

[ 
{item: {id: 1}, 'name': 'hi'}, 
{item: {id: 2}, 'name': 'hey'}, 
{item: {id: 1}, 'name': 'hello'} 
]; 

,并把它变成

[ 
{item: {id: 1}, 'name': 'hi'}, 
{item: {id: 2}, 'name': 'hey'} 
]; 

所以远远我有这样的javascript:

var mainThings = [ 
     {item: {id: 1}, 'name': 'hi'}, 
     {item: {id: 2}, 'name': 'hey'}, 
     {item: {id: 1}, 'name': 'hello'} 
     ]; 

uniqueMainsFunc = function() { 
    var ids = [], 
     mains = []; 

    _.forEach(mainThings, function(thing) { 
     if (ids.indexOf(thing.item.id) === -1) { 
      ids.push(thing.item.id); 
      mains.push(thing); 
     } 
    }); 
    return uniqueMains; 
}; 

在这种情况下,uniqueMains将只包含:

[ 
{item: {id: 1}, 'name': 'hi'}, 
{item: {id: 2}, 'name': 'hey'} 
] 

是否有lodash函数可以更好地处理这个问题? 在.forEach之后,我尝试使用!_。some(uniqueNestedIds,thing.item.id),但它不起作用。

回答

2

uniqBy方法可以解决你的问题

var mainThings = [ 
    { item: { id: 1 }, 'name': 'hi' }, 
    { item: { id: 2 }, 'name': 'hey' }, 
    { item: { id: 1 }, 'name': 'hello' } 
]; 


var uniq = _.uniqBy(mainThings, 'item.id') 

console.log(uniq); 

结果:

[ { item: { id: 1 }, name: 'hi' }, 
    { item: { id: 2 }, name: 'hey' } ] 
2

您可以使用_.uniqBy这个:

_.uniqBy(mainThings, function(item) { 
    return item.item.id; 
}); 

this Plnkr