Почему реализация javascript сокращает пропуск пропуска для первой итерации?
[1,2,3].reduce((acc, val) => {
console.log('acc',acc);
console.log('val',val)
return acc + val;
});
// acc 1
// val 2
// acc 3
// val 3
// 6
Я заметил, что выполнение первого оператора никогда не выполняется (в этом случае я бы ожидал, что будет 6 консольных журналов, по 2 на каждый элемент). Это было очень неожиданное поведение, когда я пытался выполнить функцию с побочным эффектом в каждой итерации с помощью Reduce.
На других языках, которые я использовал, каждая итерация переданного списка выполняется. Есть ли примеры в противном случае?
Почему это происходит и почему реализация нативного массива javascript уменьшается так?
========================= РЕДАКТИРОВАТЬ 1 / Решение ================== ======
Чтобы убедиться, что он проходит первую итерацию, присвойте ему начальное значение (2-й аргумент здесь / 0 в данном случае)
[1,2,3].reduce((acc, val) => {
console.log('acc',acc);
console.log('val',val)
return acc + val;
}, 0);