โจทย์
Input: [1, 3, 1, 3, 5, 7, 5, 4]
Output: [2, 6, 7, 10, 4] (1+1=2, 3+3=6, 5+5=10, 7, 4)
ตัวอย่างโค้ด
const input = [1, 3, 1, 3, 5, 7, 5, 3, 4];
const sumDuplicate = 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(sumDuplicate(input));
ผลลัพธ์
[ 2, 9, 10, 7, 4 ]
คำอธิบาย
ใช้ Map นับ frequency ของแต่ละตัวเลขreduce สร้าง Map: key=ตัวเลข, value=countArray.from(map, el => el[0] * el[1]) คูณ value * count ได้ผลรวม
Input มี 3 สามตัว (3*3=9) 1 สองตัว (1*2=2) 5 สองตัว (5*2=10) 7 หนึ่งตัว 4 หนึ่งตัว