Подскажите пожалуйста, можно ли пропустить итерацию map или forEach javascript?

Например у меня есть массив чисел number и слева направо точки их слияния isMergeNumbers в булевом значении.

// true или false говорят, делать ли слияние этого значения со следующем или нет.
// 1,2 - true, 2,4 - false;
let isMergeNumbers = [true, false, false, true];
let numbers = [1, 2, 4, 3, 5];

и я хочу пройтись по массиву numbers методом map например и по индексу проверять значения isMergeNumbers, если true возвращать новое число(текущее число + следующее) и пропустить следующую итерацию, а если false то просто возвращать текущее значение. И на выходе получить новый массив типа:

number = [3,4,8];


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

Автор решения: Anton Shchyrov

Используйте reduce

let isMergeNumbers = [true, false, false, true];
let numbers = [1, 2, 4, 3, 5];
let idx = 0;
res = isMergeNumbers.reduce(function(res, val) {
  let cur = numbers[idx++] || 0;
  if (val) {
    cur += numbers[idx++] || 0;
  }
  res.push(cur);
  return res;
}, []);

console.log(res);

→ Ссылка
Автор решения: Leonid

Может логичнее тогда isMergeNumbers прогонять через map?

let isMergeNumbers = [true, false, false, true]; // true или false говорят, делать ли слияние этого значения со следующем или нет. 1,2 - true, 2,4 - false;
let numbers = [1,2,4,3,5];

let i = 0;

let result = isMergeNumbers.map(condition => {
  let num = 0;
  if(condition){
     num = numbers[i++] + (numbers[i++] || 0); // Если я здесь изменю, то будет то же самое, никакой разницы.
  } else {
    num = numbers[i++];
  }
  return num;
})

console.log(result);

→ Ссылка