Javascript array.push不是函数-使用reduce时

Javascript array.push不是函数-使用reduce时,javascript,arrays,ecmascript-6,reduce,Javascript,Arrays,Ecmascript 6,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("a

有人能帮我理解这里发生了什么吗

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不是功能”而崩溃

检查第一个记录的
累加器
表明我们有推送方法-这是一个真正的功能:

的返回值是推送后数组的新长度。这意味着在第二次迭代中,
acc
是一个数字,没有push方法

修复很简单-将push和return语句分开:

constsecondarray=[1,2,3]。reduce((acc,item)=>{
acc.push(1);
返回acc;
}, []);

log(secondArray)
返回附件(项目)推送是否返回推送的元素?试着在另一行上按一下,然后返回acc。为什么acc的第二次迭代会变成一个数字?@Ori Drori-刚刚看到你的评论-为了不让初学者感到困惑:没有
根据.push()
-在上面的问题中,
acc
累加器的快捷方式
-这是函数式语言的一种形式,
折叠/减少
是人们每天执行的基本操作之一,
acc
是任何
汇总/累加
的通用名称。用于树、字典、状态机、数组、列表、任务等。非常广泛的分布模式。考虑到这是关于减少阵列的,理解acc RELEN代表什么非常重要。就这些:)