首页 > 解决方案 > 与reduce方法的累加器相关的类型错误

问题描述

我试图弄清楚为什么下面的代码

const test = function(arr){
    const reducer = (acc,el) => {
        if(el>0){
            return acc.push(el**2);
        }
    }
    return arr.reduce(reducer,[]);
}
console.log(test([2,3,4-5-6-1]));

抛出一个类型错误说acc.push is not a function。似乎我需要以某种方式声明参数acc应该是一个数组,但我不知道如何。

也许这是一个新手问题,但我不知道该怎么做。有人可以告诉我这个错误吗?

标签: javascripttypeerror

解决方案


Array.push返回数组的新长度。您需要从减速器返回数组。

const test = function(arr){
    const reducer = (acc,el) => {
        if(el>0){
            acc.push(el**2);
        }
        return acc;

    }
    return arr.reduce(reducer,[]);
}
console.log(test([2,3,4-5-6-1]));

但是,有一个更简单的方法:过滤和映射

console.log(
    [2, 3, -1]
        .filter(x => x > 0)
        .map(x => x ** 2)
);


推荐阅读