2016-05-13 67 views
0

我想從我當前的數組中刪除重複的數組值。我想將新的列表(沒有重複的列表)存儲到一個新變量中。刪除重複的數組值,然後將它們存儲[反應]

var names = ["Daniel","Lucas","Gwen","Henry","Jasper","Lucas","Daniel"]; 

const uniqueNames = []; 
const namesArr = names.filter((val, id) => { 
    names.indexOf(val) == id; // this just returns true 
}); 

如何刪除重複的名稱並將非重複項放入新變量中?

即:uniqueNames將返回...

["Daniel","Lucas","Gwen","Henry","Jasper"] 

(我使用的反應JSX)謝謝!

+0

有人upvoted我原來的答覆,我刪除,因爲我沒有完全理解這個問題(無論如何它可能是錯誤的)。它的肉是你在過濾器裏錯過了一個「回報」! – Scott

+0

@ScottKaye你爲什麼認爲你的解決方案是錯誤的..? –

+0

@WildWidow我不確定他是否希望數組包含已刪除的元素,或者刪除這些元素後的數組。 – Scott

回答

4

你可以做到這一點的一個班輪

const uniqueNames = Array.from(new Set(names)); 

//將返回的唯一項目的集合

請注意,@Wild Widow指出了你的一個錯誤 - 你沒有使用return語句。 (當我們忘記時,它很糟糕,但它發生了!)

我會補充說,如果考慮過濾器的第三個參數(a,b,c),可以簡化代碼,並且回調可以更加可重用。 c)函數 - 其中c是正在遍歷的數組。隨着中說,你可以重構你的代碼如下:

const uniqueNames = names.filter((val, id, array) => { 
    return array.indexOf(val) == id; 
}); 

而且,你甚至不會需要一個return語句,如果你使用ES6

const uniqueNames = names.filter((val,id,array) => array.indexOf(val) == id); 
1

你忘了使用return聲明中filter通話

const namesArr = duplicatesArray.filter(function(elem, pos) { 
    return duplicatesArray.indexOf(elem) == pos; 
}); 
相關問題