Прежде всего, давайте отформатируем всю коллекцию (массив данных).
Нам нужно:
- Формат даты: DD-MM-ГГГГ до ГГГГ-ММ-ДД .
- Свойство-значение - это строка типа, нам нужно это как число .
Простой с Array#Map
:
const collection = data.map(x => ({ ...x, day: x.day.split("-").reverse().join("-"), value: Number(x.value)}));
Далее нужно снова использовать Array#Map
для замены свойства дня на Месяц .
const mapDayToMonth = collection.map(x => ({...x, day: new Date(x.day).getMonth()}));
Метод getMonth()
возвращает месяц (от 0 до 11) для указанной даты в соответствии с местным временем.Итак, 0 - января , 1 - февраля ... и т. Д.
Последний шаг Array#Reduce
для суммирования значений за Месяц :
const sumPerMonth = mapDayToMonth.reduce((acc, cur) => {
acc[cur.day] = acc[cur.day] + cur.value || cur.value;
return acc;
}, {})
Полный пример JSFiddle :
const data = [ { day: '01-01-2018', hour: '00:00', value: '121' }, { day: '01-02-2018', hour: '05:24', value: '131' }, { day: '26-01-2018', hour: '00:07', value: '101' }, { day: '16-02-2018', hour: '08:02', value: '56' }, { day: '20-02-2018', hour: '12:02', value: '123' }, { day: '24-03-2018', hour: '10:11', value: '45' }];
const collection = data.map(x => ({ ...x, day: x.day.split("-").reverse().join("-"), value: Number(x.value)}));
console.log(collection);
const mapDayToMonth = collection.map(x => ({...x, day: new Date(x.day).getMonth()}));
console.log(mapDayToMonth);
const sumPerMonth = mapDayToMonth.reduce((acc, cur) => {
acc[cur.day] = acc[cur.day] + cur.value || cur.value; // increment or initialize to cur.value
return acc;
}, {})
console.log(sumPerMonth)
Полезные ссылки:
Карта массива
Уменьшение массива
Числовой объект
Синтаксис спреда