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