簡體   English   中英

刪除數組中的重復項,但添加計數屬性以查看重復項的數量

[英]Delete duplicates in an array but add a count property to see the number of duplicates

基本上如果我有這個數組:

[{"id" = 1, "product" = "Book"}, {"id" = 1, "product" = "Book"}, {"id" = 1, "product" = "Book"}, {"id" = 2, "product" = "Chair"}]

它會變成這個數組:

 [{"id" = 1, "product" = "Book", "count" = 3}, {"id" = 2, "product" = "Chair", "count" = 1}]

我正在使用反應。 我的另一個選擇是在創建和添加到數組時添加 count 屬性,以便不會添加重復項,但我很好奇是否有辦法使用現有數組來做到這一點。

編輯:如果兩個產品具有相同的 ID,則它們是重復的。

我嘗試使用 id 過濾數組,然后獲取第一個對象。 我再次通過 id 過濾數組以獲取長度。 然后我向第一個對象添加了一個新屬性“count”,它是過濾數組的長度,之后我將第一個對象添加到新數組中。 這樣做的問題是我必須為每個可能的 id 對其進行硬編碼,即使它沒有包含在我的數組中。

您可以將數組減少為添加了count屬性的新數組。 假設id屬性足以考慮唯一性。 如果已經看到該元素,則增加count ,否則追加一個新的增強元素對象。

 const data = [{ "id": 1, "product": "Book" }, { "id": 1, "product": "Book" }, { "id": 1, "product": "Book" }, { "id": 2, "product": "Chair" }]; const dedupedData = data.reduce((data, el) => { const index = data.findIndex(item => item.id === el.id); if (index !== -1) { data[index].count++; } else { data.push({ ...el, count: 1 }); } return data; }, []); console.log(dedupedData);

將數組減少為由id鍵控的Map (甚至只是一個普通對象)(假設這就是識別重復項所需的全部內容)。

 const arr = [{"id": 1, "product": "Book"}, {"id": 1, "product": "Book"}, {"id": 1, "product": "Book"}, {"id": 2, "product": "Chair"}] const zipped = [...arr.reduce((map, o) => { if (map.has(o.id)) { map.get(o.id).count++ } else { map.set(o.id, {...o, count: 1}) } return map }, new Map()).values()] console.log(zipped)
 .as-console-wrapper { max-height:100% !important; }

暫無
暫無

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

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