web-dev-qa-db-ja.com

array.Pushは関数ではありません-reduceを使用する場合

誰かが私がここで何が起こっているのか理解するのを手伝ってくれませんか?

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 is not a function in reduce

そして、最初に記録されたaccumulatorを調べると、Pushメソッドがあることがわかります-これは実際の関数です。

array.Push not working with reduce

19
AIon

Array#Push の戻り値は、プッシュ後の配列の新しい長さです。つまり、2回目の反復ではaccは数値であり、Pushメソッドがありません。

修正は簡単です-Pushステートメントとreturnステートメントを分離します。

const secondArray = [1, 2, 3].reduce((acc, item) => {
    acc.Push(1);

    return acc;
}, []);

console.log(secondArray);
30
Ori Drori