誰かが私がここで何が起こっているのか理解するのを手伝ってくれませんか?
let firstArray = [];
firstArray.Push(1);
firstArray.Push(1);
firstArray.Push(1);
console.log("firstArray", firstArray); // result [ 1, 1, 1 ] - as expected.
let secondArray = [1, 2, 3].reduce((acc, item) => {
console.log("acc", acc);
console.log("typeof acc", typeof acc);
// on first passing, the accumulator (acc) is Array[] == object.
// on the second passing the acc == number.
// but why?
/// i expect to get [1,1,1] as my secondArray.
return acc.Push(1);
}, []);
console.log("secondArray", secondArray);
「acc.Pushは関数ではありません」でプログラムがクラッシュします
そして、最初に記録されたaccumulator
を調べると、Pushメソッドがあることがわかります-これは実際の関数です。
Array#Push
の戻り値は、プッシュ後の配列の新しい長さです。つまり、2回目の反復ではacc
は数値であり、Pushメソッドがありません。
修正は簡単です-Pushステートメントとreturnステートメントを分離します。
const secondArray = [1, 2, 3].reduce((acc, item) => {
acc.Push(1);
return acc;
}, []);
console.log(secondArray);