Computer >> Máy Tính >  >> Lập trình >> Javascript

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

Giả sử chúng ta có một mảng đối tượng chứa dữ liệu về một số sinh viên và điểm của họ như thế này -

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' },
];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy.

Hàm nên loại bỏ các mục thừa trên cơ sở thuộc tính 'chủ đề' của các đối tượng. Hơn nữa, hàm phải thêm tất cả các dấu và không có học sinh cho một đối tượng duy nhất trong đối tượng duy nhất đó.

Do đó, đối với mảng trên, đầu ra sẽ giống như -

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

Ví dụ

Mã cho điều này sẽ là -

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: subject,
            marks: +marks,
            noOfStudents: +noOfStudents
         });
      };
      return acc;
   }, []);
   return res;
};
console.log(groupBySubject(arr));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

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