Подскажите пожалуйста, можно ли пропустить итерацию 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);