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

รวมค่าของ key ซ้ำกันในอาร์เรย์อ็อบเจ็กต์ - JavaScript

อาร์เรย์: [{'TR-01':1}, {'TR-02':3}, {'TR-01':3}, {'TR-02':5}]

รวมค่าของ key เดียวกัน: [{'TR-01':4}, {'TR-02':8}]

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

const arr = [{'TR-01':1}, {'TR-02':3}, {'TR-01':3}, {'TR-02':5}];
const sumDuplicate = arr => {
  const map = {};
  for (let i = 0; i < arr.length; ) {
    const key = Object.keys(arr[i])[0];
    if (!map.hasOwnProperty(key)) {
      map[key] = i++;
      continue;
    }
    arr[map[key]][key] += arr[i][key];
    arr.splice(i, 1);
  }
};
sumDuplicate(arr);
console.log(arr);

ผลลัพธ์

[ { 'TR-01': 4 }, { 'TR-02': 8 } ]

คำอธิบาย: ใช้ object map เก็บ index แรกของแต่ละ key วนลูป while-style (i ไม่เพิ่มถ้าสplice) หา key ซ้ำ บวกค่า ลบตัวซ้ำด้วย splice

วิธีทันสมัย: Object.values(arr.reduce((acc, o) => { const k = Object.keys(o)[0]; acc[k] = (acc[k] || 0) + o[k]; return acc; }, {})).map((v, i) => ({[Object.keys(arr.find(o => o[k]==v))[0]]: v})) - ซับซ้อนกว่า แนะนำ用 reduce สร้าง map แล้วแปลงกลับ