Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

รวมค่า Duplicate ใน Array ใน JavaScript

โจทย์

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=count
Array.from(map, el => el[0] * el[1]) คูณ value * count ได้ผลรวม
Input มี 3 สามตัว (3*3=9) 1 สองตัว (1*2=2) 5 สองตัว (5*2=10) 7 หนึ่งตัว 4 หนึ่งตัว