Сортировка массива объектов и суммирование значения у объектов с одинаковым идентификатором

Суть задачи - отсортировать массив объектов по дате, при этом у объектов с одинаковым значением id должно суммироваться значение salary.

Просьба навести на мысль, как организовать алгоритм действий, чтобы достичь результата.

из этого:

  arr = [
   {
    id: 111,
    name: 'Ivan',
    salary: 5000,
    date: '2020-01-01' 
   },
   {
    id: 222,
    name: 'Oleg',
    salary: 3000,
    date: '2020-01-01' 
   },
   {
    id: 111,
    name: 'Ivan',
    salary: 5000,
    date: '2020-01-01' 
   },
   {
    id: 333,
    name: 'Anya',
    salary: 3000,
    date: '2020-01-02' 
   },
   {
    id: 444,
    name: 'Petr',
    salary: 5000,
    date: '2020-01-01' 
   }
  ]

должно получиться это:

 obj = {
  '2020-01-01' : {
   111: {
      "salary": 10000

   },

  }
 }


Ответы (1 шт):

Автор решения: DiD
arr.sort((a, b) => a.date>b.date?1:a.date<b.date?-1:0)
   .reduce(obj, item) => {
     if(!obj[item.date]){
       obj[item.date]={};
     }
     if(!obj[item.date][item.id]){
       obj[item.date][item.id] = { salary:item.salary, name:item.name, id:item.id };
     }
     else {
       obj[item.date][item.id].salary += item.salary; 
     }
     return obj;
   }, {})
→ Ссылка