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

รวมระเบียน (Aggregate Records) ใน JavaScript

สมมติว่าเรามีอาร์เรย์ของอ็อบเจกต์ที่มีข้อมูลเกี่ยวกับธุรกรรมสุ่มบางอย่างที่ทำโดยคนบางคน:

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 }
]