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

การรวมอ็อบเจ็กต์ JavaScript ที่มีคีย์เหมือนกันและนับจำนวน


ภาพรวม

สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์:

const arr = [
  { "value": 10, "id": "111", "name": "BlackCat" },
  { "value": 10, "id": "111", "name": "BlackCat" },
  { "value": 15, "id": "777", "name": "WhiteCat" }
];

เราต้องเขียนฟังก์ชันที่รวมอ็อบเจ็กต์ที่มีค่า id เหมือนกัน และนับจำนวน

ผลลัพธ์ที่คาดหวัง

const output = [
  { "value": 10, "id": "111", "name": "BlackCat", "count": 2 },
  { "value": 15, "id": "777", "name": "WhiteCat", "count": 1 }
]

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

const arr = [
  { "value": 10, "id": "111", "name": "BlackCat" },
  { "value": 10, "id": "111", "name": "BlackCat" },
  { "value": 15, "id": "777", "name": "WhiteCat" }
];

const combinedItems = (arr = []) => {
  const res = arr.reduce((acc, obj) => {
    let found = false;
    for (let i = 0; i < acc.length; i++) {
      if (acc[i].id === obj.id) {
        found = true;
        acc[i].count++;
      }
    }
    if (!found) {
      obj.count = 1;
      acc.push(obj);
    }
    return acc;
  }, []);
  return res;
};

console.log(combinedItems(arr));

ผลลัพธ์ในคอนโซล

[
  { value: 10, id: '111', name: 'BlackCat', count: 2 },
  { value: 15, id: '777', name: 'WhiteCat', count: 1 }
]