ภาพรวม
สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์:
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 }
]