2016-05-16 21 views
2

雄弁Javascriptを第5章演習1

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

を、すべての値を含む単一の配列を作成し、コンソールすなわちにログインするために削減/連結を使用して[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); 
}, [])); 

[]パラメータはreduce関数で何をするのですか?それを放棄したのは問題ですか?

+0

initialValue:任意。コールバックの最初の呼び出しの最初の引数として使用する値。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – IrkenInvader

答えて

4

reduceには、初期値が渡されるオプションがあります。彼らのソリューションでは空の配列を提供し、残りの値をそこから追加することができます。

しかし、reduceは、与えられていない場合、初期値として配列の最初の値を使用するため、あなたの作品は動作します。 MDNから

currentValueが二番目の引数であり、previousValueはコールバックの最初の引数であることに注意):

コールバックが呼び出された初めて、previousValuecurrentValueは、2つの値のいずれかとすることができます。 reduceの呼び出しでinitialValueが指定されている場合、previousValueinitialValueに等しくなり、currentValueは配列の最初の値と等しくなります。 initialValueが指定されていない場合、previousValueは配列の最初の値と等しくなり、currentValueは2番目の値と等しくなります。

4

初期値。

の違いは、2つの場合に表示されます。arraysは空の配列の場合は

  • あなたのバージョンがクラッシュします。彼らはそうしないでしょう。

  • arraysに1つの配列が含まれていると、そのインスタンスが取得されますが、新しいインスタンスにコピーされます。