Как суммировать значение ключа в массиве нарастающим итогом?

дан массив объектов
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}
]


Огромное спасибо всем
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Собрать новый массив:

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

// или

const newArr = arr.map(function(n) {
  return { ...n, fractionTotal: this.val += n.fraction };
}, { val: 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);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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