Как переписать цикл for в reducer?

господа. Прошу помочь со следующим вопросом. Есть цикл:

for (let i = 1; i < arrayOfSizes.length; i++) {
          if (arrayOfSizes[i].offset < arrayOfSizes[i - 1].offset) {
            offset += arrayOfSizes[i].offset;
          }
        }
Он перебирает массив с объектами, и суммирует значения "offset", если текущий меньше предыдущего. Нужно переписать его через reducer, чтобы получилось что то типа этого:

const offset = arrayOfSizes.reduce(
          (prev: any, val: any, i: any, arr: any) =>
            val.offset < arr[i].offset ? prev + val.offset : prev,
          0,
        );

У меня в коде ошибка, но пока не могу понять в чем.


Ответы (1 шт):

Автор решения: Aziz Umarov

Думаю как-то так

let arrayOfSizes = [{offset: 1},{offset: 2},{offset: 3},{offset: 4},{offset: 5},{offset: 4},{offset: 3},{offset: 2},{offset: 1}];

let result = arrayOfSizes.reduce( (acc, item, index) => {
 acc += (index >= 1 && item.offset < arrayOfSizes[index - 1].offset) ? item.offset : 0;
 return acc;
}, 0);

console.log(result);

→ Ссылка