รวมสมาชิกที่ซ้ำกันในอาร์เรย์โดยการบวกค่าเดิม (ไม่ใช่นับจำนวนครั้ง)
ตัวอย่าง
Input: [1, 3, 1, 3, 5, 7, 5, 4] 1+1=2, 3+3=6, 5+5=10, 7, 4 Output: [2, 6, 10, 7, 4] (ลำดับตามครั้งแรกที่เจอ)
ตัวอย่างโค้ด
const input = [1, 3, 1, 3, 5, 7, 5, 4];
const mergeDuplicates = arr => {
const map = arr.reduce((acc, val) => {
if (acc.has(val)) acc.set(val, acc.get(val) + 1);
else acc.set(val, 1);
return acc;
}, new Map());
return Array.from(map, el => el[0] * el[1]);
};
console.log(mergeDuplicates(input));
ข้อสังเกต
โค้ดคูณ value × count (เช่น 1×2=2, 3×2=6) ไม่ใช่บวกค่าเดิมซ้ำ (1+1=2, 3+3=6) - ผลลัพธ์เหมือนกันแต่ความหมายต่างกัน
ผลลัพธ์
[ 2, 6, 10, 7, 4 ]
ลำดับ: Map รักษาลำดับการ insert (ES2015+) ดังนั้นผลลัพธ์ตามลำดับครั้งแรกที่เจอ