簡體   English   中英

集對象ecmascript 6(es6)

[英]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/

你可以使用reducemapesmascript 6 ,然后通過值Set構造函數。 但是,您也可以使用普通的ObjectObject.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 }],
  ...
])

如果對象除了idtitle不包含任何其他內容,則可以將地圖簡化為:

new Map([
  [#mixed char and num, #string],
  ...
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM