Может кто-нибудь объяснить, почему функция приведения утешает следующие числа - PullRequest
3 голосов
/ 21 сентября 2019

Я новичок в Javascript и сегодня изучал функцию Reduce и просматривал примеры в Mozzila Developer, и я немного изменил ее, и это дало мне результат, который я не могу понять (так как я очень новый).Может кто-нибудь, пожалуйста, объясните результат здесь и "правила" за ним?Спасибо

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(accumulator, currentValue) {
  return accumulator + currentValue
});

console.log(flattened)

Ответ: 0, 12, 34, 5

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Поскольку вы не передали начальное значение в качестве аккумулятора, начальным значением здесь является массив [0, 1].На каждой итерации операция accumulator + currentValue выполняется и используется в качестве нового аккумулятора на следующей итерации (или как полное возвращаемое значение .reduce, если на последней итерации).

Напервая итерация, [0, 1] + [2, 3] приводит к "0,12,3".Это связано с тем, что когда номера не используются с +, они сначала преобразуются в примитивы, а когда массивы преобразуются в примитивы, каждый элемент объединяется запятой.Итак,

[0, 1] + [2, 3]
// evaluates to
'0,1' + '2,3'
// evaluates to
'0,12,3'

На следующей итерации:

'0,12,3' + [4, 5]
// evaluates to
'0,12,3' + '4,5'
// evaluates to
'0,12,34,5'

Это последняя итерация, поэтому окончательный результат равен '0,12,34,5'.

Обратите внимание, что есть без пробелов - элементы массива объединяются только запятой, а не запятой и пробелом.

1 голос
/ 21 сентября 2019

Это потому, что метод уменьшает уменьшает массив до одного значения.

В вашем случае вы добавляете arrays([0,1], [2,3], [4,5]), который возвращает строку

Следовательно, аккумулятор накапливает суммуитерированного currentValue.

Работает: цикл работает в следующих шагах

  1. accumulator = "0,1"
  2. accumulator = "0,1" + "2,3"
  3. accumulator = "0,1" + "2,3" + "4,5"

читаемый вывод = "0,1 2,3 4,5"

Сгенерированный системой выход = "0,12,34,5"

...