2016-05-16 5 views
2

Задача состояла в том, чтобы взять простой массив:Eloquent Javascript Глава 5 Упражнение 1

var arrays = [[1,2,3],[4,5],[6]]; 

и использовать уменьшение/CONCAT, чтобы создать единый массив, содержащий все значения и войти в консоль, т.е. [1,2,3 , 4,5,6], так что я произвел:

console.log(arrays.reduce(function(flat, current) { 
    return flat.concat(current); 
})); 

Полностью работает, но на проверку их решения у них есть одна небольшая разница:

console.log(arrays.reduce(function(flat, current) { 
    return flat.concat(current); 
}, [])); 

Что делает параметр [] в функции уменьшения, и это проблема, из-за которой я ее оставил?

+0

initialValue: дополнительно. Значение для использования в качестве первого аргумента для первого вызова обратного вызова. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – IrkenInvader

ответ

4

reduce имеет возможность передать начальное значение. В своем решении они предоставляют пустой массив, поэтому остальная часть ваших значений может быть добавлена ​​оттуда.

Однако ваша работа работает, потому что reduce использует первое значение в массиве как начальное значение, если оно не задано.

От MDN (обратите внимание, что previousValue является первым аргументом в функции обратного вызова, currentValue является второй аргумент):

В первый раз обратного вызова вызывается, previousValue и currentValue может быть одним из двух значений. Если в вызове для восстановления предоставляется initialValue, то previousValue будет равно initialValue, а currentValue будет равен первому значению в массиве. Если не было initialValue, то previousValue будет равно первому значению в массиве, а currentValue будет равно второму.

4

Начальная стоимость.

Разница возникает в двух случаях:

  • Вы версия вылетать, если arrays пустой массив. Их не будет.

  • Если arrays содержит единственный массив, вы получаете этот экземпляр, но копируете его в новый.

Смежные вопросы