bmber
@bmber
Иду по кривой дорожке IT вверх.

Как получить последовательно разницу значений в массиве?

Допустим есть массив data
let data = [{date: '16.05.2022',sick: 2766236},
            {date: '15.05.2022',sick: 2765948},
            {date: '14.05.2022',sick: 2765613},
            {date: '13.05.2022',sick: 2765211},
            {date: '12.05.2022',sick: 2764737},
            {date: '11.05.2022',sick: 2764443},
            {date: '10.05.2022',sick: 2764226},
            {date: '09.05.2022',sick: 2763989},
            {date: '08.05.2022',sick: 2763721},
            {date: '07.05.2022',sick: 2763325},
            ]

Мне нужно получить разницу значений sick с предыдущим значением. кроме последнего. конечно. там вычитать неоткуда.
Что-то вроде этого
data = [{date: '16.05.2022',sick: 2766236, newSick: 288},
            {date: '15.05.2022',sick: 2765948, newSick: 335},
            {date: '14.05.2022',sick: 2765613, newSick: 402},
            {date: '13.05.2022',sick: 2765211, newSick: 474},
            {date: '12.05.2022',sick: 2764737, newSick: 294},
            {date: '11.05.2022',sick: 2764443, newSick: 217},
            {date: '10.05.2022',sick: 2764226, newSick: 237},
            {date: '09.05.2022',sick: 2763989, newSick: 268},
            {date: '08.05.2022',sick: 2763721, newSick: 396},
            {date: '07.05.2022',sick: 2763325, newSick: 2763325},
            ]

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

const newData = data.map((n, i, a) => ({
  ...n,
  newSick: n.sick - (a[i + 1]?.sick ?? 0),
}));

Добавить свойство элементам существующего массива:

data.forEach((n, i, a) => n.newSick = n.sick - (a[i + 1]?.sick ?? 0));
// или
data.reduceRight((prev, n) => (n.newSick = n.sick - prev, n.sick), 0);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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