2016-05-21 594 views
2

我試圖使用lodash.js刪除重複項,但我無法使其正常工作。使用lodash.js刪除對象數組中的重複項

這是一個對象的陣列中的結構:

{ 
    label: 'tagA', 
    value: 1 
} 

因此,讓說我有此數組:

var objectsArray = [ 
    { 
    label: 'tagA', 
    value: 1 
    }, 
    { 
    label: 'tagB', 
    value: 2 
    }, 
    { 
    label: 'tagC', 
    value: 3 
    }, 
    { 
    label: 'tagB', 
    value: 4 
    }, 
    { 
    label: 'tagB', 
    value: 5 
    }, 
]; 

我提出這一段代碼與_.uniqBy()功能從lodash.js試圖去除具有相同標籤的陣列的元件,但它不能如我所料地工作:

var uniq = _.uniqBy(objectsArray, function(o){ 
     return o.label; 
    }); 

我基於一些在這裏和那裏發現的樣本,當然還有lodash文檔,但我缺乏這方面的知識,所以任何幫助它都會超級讚賞。

謝謝。

+0

*它無法按預期工作*您如何期待它的工作,以及它如何工作? –

回答

5

確保您使用正確的namings,該代碼工作對我來說:

var arr = [ 
       { 
        label: 'tagA', 
        value: 1 
       }, 
       { 
        label: 'tagB', 
        value: 2 
       }, 
       { 
        label: 'tagC', 
        value: 3 
       }, 
       { 
        label: 'tagB', 
        value: 4 
       }, 
       { 
        label: 'tagB', 
        value: 5 
       }, 
       ]; 

    var uniq = _.uniqBy(arr, function(o){ 
     return o.label; 
    }); 

    console.log(uniq); // >> Returned an array with first 3 objects from array arr 
+1

那麼OP的代碼有什麼問題? –

+0

我想他錯過了第一個'.uniqBy()'參數中的數組名稱 – vicodin

+0

不,他傳遞了'objectsArray'。 –

0

我覺得第二個例子正是你需要uniqBy

// The `_.property` iteratee shorthand. 
_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); 
// → [{ 'x': 1 }, { 'x': 2 }] 
+0

感謝您的努力,我真的很感激。 – Yonirt

0

如果你想確保你可以用uniqWith();

這對我有用

var data = [ 
    { 
    label: 'tagA', 
    value: 1 
    }, 
    { 
    label: 'tagB', 
    value: 2 
    }, 
    { 
    label: 'tagC', 
    value: 3 
    }, 
    { 
    label: 'tagB', 
    value: 4 
    }, 
    { 
    label: 'tagB', 
    value: 5 
    }, 
]; 

var filtered = _.uniqWith(data, function(first, second){ 

    return first.label === second.label 
});