[英]Sets of Object ecmascript 6 (es6)
我有這種形式的對象數組:
[
{id : #mixed char and num , title : #string },
{id : #mixed char and num , title : #string } ...]
我想遍歷它並刪除重復的對象,我使用Set結構這樣做,但是問題是Sets add運算符將接受我嘗試過的重復對象
let Unique = new Set([], X => x.id)
但不會幫助
您可以使用.filter
刪除所有重復.filter
let uniqueArr = arr.filter((item, index) => {
return arr.findIndex(item2 => item2.id === item.id) === index;
});
演示概念的小提琴: https : //jsfiddle.net/4oanw972/
你可以使用reduce
與map
的esmascript 6
,然后通過值Set
構造函數。 但是,您也可以使用普通的Object
, Object.values
中的es6
new Set(arr.reduce((map,item)=>map.set(item.id, item), new Map()).values());
如您所知,您通過id
標識唯一,因此只需創建一個id
指向實際對象的鍵,因此先前具有相同id的對象將被覆蓋,最終您將只對每個id
擁有一個對象,然后得到值並構建您的集合。
作為參考狀態,
Set對象使您可以存儲任何類型的唯一值,無論是原始值還是對象引用。
如果這些是不同的對象引用,則不會重復數據刪除。 如果需要通過id
唯一鍵標識對象,則“ Set
是錯誤的選擇。 地圖可以達到此目的:
new Map([
[#mixed char and num, {id : #mixed char and num , title : #string }],
...
])
如果對象除了id
和title
不包含任何其他內容,則可以將地圖簡化為:
new Map([
[#mixed char and num, #string],
...
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.