параметр по умолчанию в JS Reduce игнорируется - PullRequest
0 голосов
/ 08 октября 2019

Я играл с переменными по умолчанию в JavaScript, но я не могу заставить этот пример работать на чем-либо (узел 10.16.3, Firefox 69, Chrome 76)

let arr = [1, 2, 3];
arr.reduce( (acc = 5, el) => acc + el)  // -> 6

Сбой происходит тихо ида, я знаю, что могу сделать то же самое, передав начальное значение после обратного вызова. Я просто хочу знать, почему это не работает.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

acc = 5 будет использовать 5 в качестве значения по умолчанию, если в противном случае значение будет undefined.

С Array#reduce, если вы не предоставите начальный аргументв виде arr.reduce(callback, initial), затем используется первый элемент массива, и итерация начинается со второго элемента массива:

let arr = [1, 2, 3];
arr.reduce( (acc = 5, el) => {
  console.log(acc, el);
  return acc + el;
})  // -> 6

Таким образом, единственный способ получить acc be undefined - это если вы явно установите его таковым через начальный параметр, или еслипервый элемент undefined:

let arr = [1, 2, 3];

let initialiseWithUndefined = [1, 2, 3].reduce( (acc = 5, el) => acc + el, undefined)  // -> 11
console.log(initialiseWithUndefined);

let firstItemIsUndefined = [undefined, 2, 3].reduce( (acc = 5, el) => acc + el)  // -> 10
console.log(firstItemIsUndefined);
1 голос
/ 08 октября 2019

Array.reduce initialValue Необязательно

Значение, используемое в качестве первого аргумента для первого вызова обратного вызова. Если initialValue не указано, будет использоваться и пропущен первый элемент в массиве. Вызов reduce() для пустого массива без initialValue вызовет ошибку TypeError.

Итак, [1, 2, 3] повторяется 2 раза со значениями [2, 3] и аккумулятором [1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...