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

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

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

const arr = [
  {"firstName":"John", "value": 89},
  {"firstName":"Peter", "value": 151},
  {"firstName":"Anna", "value": 200},
  {"firstName":"Peter", "value": 22},
  {"firstName":"Anna","value": 60}
];

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

ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็น:

const output = [
  {"firstName":"John", "value": 89},
  {"firstName":"Peter", "value": 173},
  {"firstName":"Anna", "value": 260}
];

สำหรับแต่ละอ็อบเจกต์ เราจะหาอ็อบเจกต์ที่คล้ายกันแบบ recursive (คล้ายกันหมายถึง firstName เหมือนกัน) จากนั้นบวก property value เข้าไปในอ็อบเจกต์หนึ่งและลบอีกตัวออก จนครบอาร์เรย์

ตัวอย่าง

โค้ดต่อไปนี้เป็นตัวอย่าง:

const arr = [
  {"firstName":"John", "value": 89},
  {"firstName":"Peter", "value": 151},
  {"firstName":"Anna", "value": 200},
  {"firstName":"Peter", "value": 22},
  {"firstName":"Anna","value": 60}
];

const sumSimilar = arr => {
  const res = [];
  for(let i = 0; i < arr.length; i++){
    const ind = res.findIndex(el => el.firstName === arr[i].firstName);
    if(ind === -1){
      res.push(arr[i]);
    }else{
      res[ind].value += arr[i].value;
    };
  };
  return res;
};

console.log(sumSimilar(arr));

ผลลัพธ์

จะแสดงผลในคอนโซลดังนี้:

[
  { firstName: 'John', value: 89 },
  { firstName: 'Peter', value: 173 },
  { firstName: 'Anna', value: 260 }
]