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

Nhóm theo đối tượng mảng JavaScript

Giả sử chúng ta có một mảng mảng chứa điểm của một số học sinh trong một số môn học như thế này -

const arr = [ ["English", 52], ["Hindi", 154], ["Hindi", 241], ["Spanish", 10], ["French", 65], ["German", 98], ["Russian", 10] ];

Chúng tôi được yêu cầu viết một hàm JavaScript nhận vào một mảng như vậy và trả về một đối tượng của các đối tượng.

Đối tượng trả về phải chứa một đối tượng cho mỗi chủ đề duy nhất và đối tượng đó phải chứa thông tin như số lần xuất hiện của ngôn ngữ đó, tổng số điểm và điểm trung bình.

Ví dụ

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

const arr = [
   ["English", 52],
   ["Hindi", 154],
   ["Hindi", 241],
   ["Spanish", 10],
   ["French", 65],
   ["German", 98],
   ["Russian", 10]
];
const groupSubjects = arr => {
   const grouped = arr.reduce((acc, val) => {
      const [key, total] = val;
      if(!acc.hasOwnProperty(key)){
         acc[key] = {
            'count': 0,
            'total': 0
         };
      };
      const accuKey = acc[key];
      accuKey['count']++;
      accuKey['total'] += total;
      accuKey['average'] = total / accuKey['count'];
      return acc;
   }, {});
   return grouped;
};
console.log(groupSubjects(arr));

Đầu ra

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

{
English: { count: 1, total: 52, average: 52 },
Hindi: { count: 2, total: 395, average: 120.5 },
Spanish: { count: 1, total: 10, average: 10 },
French: { count: 1, total: 65, average: 65 },
German: { count: 1, total: 98, average: 98 },
Russian: { count: 1, total: 10, average: 10 }
}