Размещение повторяющихся объектов из одного массива в их собственные массивы - PullRequest
0 голосов
/ 16 июня 2020

У меня есть массив данных, подобный следующему.

let arr = [
        {date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
        {date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
        {date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
        {date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
        {date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
        {date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
        {date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
        {date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
      ]

Я хочу иметь возможность сортировать массив и sh любые объекты, имеющие совпадающие даты, в их собственный массив как показано ниже

let sortedArr = [
        [
          {date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'}
        ],
        [
          {date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'}
        ],
        [
          {date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
          {date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'}
        ],
        [
          {date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'}
        ],
        [
          {date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
          {date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
        ]
        [
          {date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'}
        ],
      ]

Я подумал о том, чтобы сделать функцию map () или reduce () для массива, но, честно говоря, не знаю, с чего начать.

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать hashmap для группировки массивов по date и возвращать его набор значений следующим образом:

let arr = [
        {date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
        {date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
        {date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
        {date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
        {date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
        {date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
        {date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
        {date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
];
console.log( mapDates(arr) );

function mapDates(arr){
     let map = {};
     for(let i = 0; i < arr.length; i++){
          if(!map[ arr[i]['date'] ])
               map[ arr[i]['date'] ] = [ arr[i] ];
          else
               map[ arr[i]['date'] ].push(arr[i]);
     }
     return Object.values(map);
}
...