@teertsneerg

Как просуммировать массив?

Есть отсортированный по дате массив вида
let array = [{x:'05.05.2020', y:50}, {x:'08.05.2020', y:70} ... ]


Мне нужно просуммировать массив по месяцам, а если месяца нет (в примере даты начинаются с 5 месяца, значит 4х первых нет) присваивать какое-нибудь значение, например false. Может быть записей за несколько лет.

Всё это мне нужно чтобы вывести табличку с суммами по месяцам и по годам (что-то вроде того, как на скрине), если есть вариант проще - с удовольствием воспользуюсь.

FFf229B5.jpg
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
@cython
В js, у массивов есть метод reduce, который позволяет превратить массив в 1 значение, при помощи переданной функции:
const reducer = (acc, val) => {
  if (val.x) {
    let key = val.x.slice(3);  // получаем ключ вида mm.yyyy, если только mm надо, то val.x.slice(3, 5)
    if (!key in acc) {
      acc[key] = 0;
    }
    acc[key] += val.y;
  }
  return acc;
}
let result = array.reduce(reducer, {});
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const grouped = arr.reduce((acc, n) => {
  const [ , month, year ] = n.x.split('.');
  (acc[year] = acc[year] || Array(12).fill(0))[month - 1] += n.y;
  return acc;
}, {});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы