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

หาผลรวมค่าที่ไม่ซ้ำ (Unique Values Only) - JavaScript

หาผลรวมของค่าที่ปรากฏ เพียงครั้งเดียว ในอาร์เรย์ (Unique Values - ไม่ใช่ Distinct)

ตัวอย่าง

[2, 5, 5, 3, 2, 7, 4, 9, 9, 11]
Unique (ปรากฏ 1 ครั้ง): 3, 7, 4, 11
Sum = 25

ตัวอย่างโค้ด

const sumUnique = arr => {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) {
      sum += arr[i];
    }
  }
  return sum;
};

console.log(sumUnique([2, 5, 5, 3, 2, 7, 4, 9, 9, 11]));

ผลลัพธ์

25

วิธีแบบ Map (O(n) - เร็วกว่า)

const sumUnique = arr => {
  const freq = new Map();
  for (const v of arr) freq.set(v, (freq.get(v) || 0) + 1);
  return [...freq.entries()].filter(([_, c]) => c === 1).reduce((s, [v]) => s + v, 0);
};

ความแตกต่าง Unique vs Distinct

ประเภทคำอธิบายตัวอย่าง [1,2,2,3]
Uniqueปรากฏ 1 ครั้งพอดี1, 3 → Sum = 4
Distinctค่าที่ไม่ซ้ำกัน (Unique Values)1, 2, 3 → Sum = 6