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

182
15 мая 2022, 23:50

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

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,
        );

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

Answer 1

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

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);

READ ALSO
Запоминание просмотренных элементов JS

Запоминание просмотренных элементов JS

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

152
Заполнение массива случайным образом

Заполнение массива случайным образом

Нужно заполнить массив случайным образом в заданном промежутке: элемент добавляется в массив при нажатии на кнопку «ОК»Добавить сортировку...

164
Как найти потерянную скобку?

Как найти потерянную скобку?

Делаю проэкт галерею на javascript, потерял скобку

258
Swiper js: destroy и init в зависимости от ширины экрана?

Swiper js: destroy и init в зависимости от ширины экрана?

Всем приветПодскажите, пожалуйста, как решить проблему

153