Как посчитать префиксные суммы для определённого свойства в массиве объектов?

Есть массив:

const arr = [
  { id: 0, sum: 21, fraction: 5, fractionTotal: null },
  { id: 1, sum: 21, fraction: 4, fractionTotal: null },
  { id: 2, sum: 22, fraction: 3, fractionTotal: null },
  { id: 3, sum: 23, fraction: 2, fractionTotal: null },
];

Необходимо в fractionTotal записать значение fraction + fraction из предыдущего объекта, в итоге должен получиться следующий массив:

const arr = [
  { id: 0, sum: 21, fraction: 5, fractionTotal: 5 },
  { id: 1, sum: 21, fraction: 4, fractionTotal: 9 },
  { id: 2, sum: 22, fraction: 3, fractionTotal: 12 },
  { id: 3, sum: 23, fraction: 2, fractionTotal: 14 },
];
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Собрать новый массив:

const newArr = arr.reduce((acc, n) => (
  acc.push({ ...n, fractionTotal: n.fraction + (acc.at(-1)?.fractionTotal ?? 0) }),
  acc
), []);

// или

const newArr = arr.map(function({ ...n }) {
  n.fractionTotal = this[0] += n.fraction;
  return n;
}, [ 0 ]);

Изменить существующий:

arr.forEach((n, i, a) => n.fractionTotal = n.fraction + (i && a[i - 1].fractionTotal));

// или

arr.reduce((acc, n) => n.fractionTotal = acc + n.fraction, 0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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