สมมติว่าเรามีอาร์เรย์ของอ็อบเจกต์ที่มีข้อมูลเกี่ยวกับธุรกรรมสุ่มบางอย่างที่ทำโดยคนบางคน:
const transactions = [
{ name: 'Rakesh', amount: 1500 },
{ name: 'Rajesh', amount: 1200 },
{ name: 'Ramesh', amount: 1750 },
{ name: 'Rakesh', amount: 2100 },
{ name: 'Mukesh', amount: 1100 },
{ name: 'Rajesh', amount: 1950 },
{ name: 'Mukesh', amount: 1235 },
{ name: 'Ramesh', amount: 2000 }
];
เราต้องเขียนฟังก์ชันที่รับอาร์เรย์นี้และรวม (aggregate) คืนค่าจำนวนเงินธุรกรรมของคนที่ไม่ซ้ำกันในอ็อบเจกต์ที่แยกกัน
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน:
ตัวอย่างโค้ด
const transactions = [
{ name: 'Rakesh', amount: 1500 },
{ name: 'Rajesh', amount: 1200 },
{ name: 'Ramesh', amount: 1750 },
{ name: 'Rakesh', amount: 2100 },
{ name: 'Mukesh', amount: 1100 },
{ name: 'Rajesh', amount: 1950 },
{ name: 'Mukesh', amount: 1235 },
{ name: 'Ramesh', amount: 2000 }
];
const aggregateArray = arr => {
return arr.reduce((acc, val) => {
const index = acc.findIndex(obj => obj.name === val.name);
if (index !== -1) {
acc[index].amount += val.amount;
} else {
acc.push({
name: val.name,
amount: val.amount
});
}
return acc;
}, []);
};
console.log(aggregateArray(transactions));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[
{ name: 'Rakesh', amount: 3600 },
{ name: 'Rajesh', amount: 3150 },
{ name: 'Ramesh', amount: 3750 },
{ name: 'Mukesh', amount: 2335 }
]