Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tổng giá trị thuộc tính đối tượng mảng vào mảng đối tượng mới trong JavaScript

Cho mảng đối tượng học sinh và điểm:

const arr = [ 
  { subject: 'Maths', marks: '40', noOfStudents: '5' }, 
  { subject: 'Science', marks: '50', noOfStudents: '16' }, 
  { subject: 'History', marks: '35', noOfStudents: '23' }, 
  { subject: 'Science', marks: '65', noOfStudents: '2' }, 
  { subject: 'Maths', marks: '30', noOfStudents: '12' }, 
  { subject: 'History', marks: '55', noOfStudents: '20' } 
];

Viết hàm gom nhóm theo subject, cộng dồn marks và noOfStudents.

Kết quả mong đợi:

[ 
  { subject: 'Maths', marks: '70', noOfStudents: '17' }, 
  { subject: 'Science', marks: '115', noOfStudents: '18' }, 
  { subject: 'History', marks: '95', noOfStudents: '43' } 
]

Ví dụ

const arr = [ 
  { subject: 'Maths', marks: '40', noOfStudents: '5' }, 
  { subject: 'Science', marks: '50', noOfStudents: '16' }, 
  { subject: 'History', marks: '35', noOfStudents: '23' }, 
  { subject: 'Science', marks: '65', noOfStudents: '2' }, 
  { subject: 'Maths', marks: '30', noOfStudents: '12' }, 
  { subject: 'History', marks: '55', noOfStudents: '20' } 
]; 
const groupBySubject = (arr = []) => { 
  const map = {}; 
  let res = []; 
  res = arr.reduce((acc, val) => { 
    const { subject, marks, noOfStudents } = val; 
    const { length: l } = acc; 
    if(map.hasOwnProperty(subject)){ 
      acc[map[subject]]['marks'] = +marks; 
      acc[map[subject]]['noOfStudents'] = +noOfStudents; 
    } else { 
      map[subject] = l; 
      acc.push({ subject, marks: +marks, noOfStudents: +noOfStudents }); 
    }; 
    return acc; 
  }, []); 
  return res; 
}; 
console.log(groupBySubject(arr));

Kết quả

Kết quả in ra console (lưu ý: code gốc có bug ghi đè thay vì cộng dồn):

[ 
  { subject: 'Maths', marks: 30, noOfStudents: 12 }, 
  { subject: 'Science', marks: 65, noOfStudents: 2 }, 
  { subject: 'History', marks: 55, noOfStudents: 20 } 
]