2016-03-04 108 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