javascript - 与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
应该是一个数组,但我不知道如何。
也许这是一个新手问题,但我不知道该怎么做。有人可以告诉我这个错误吗?
解决方案
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)
);
推荐阅读
- ruby-on-rails - 如何在创建循环 Rails/Ruby 中引用先前创建的对象
- javascript - 画布上下文属性以防止硬件加速渲染?
- python - 如何通过考虑前 2 个观察值的平均值来填充 NaN 值
- laravel-5 - 如何修复laravel中未定义的变量错误
- json - JSInterop.Json.Deserialize 正在从 DateTime 对象中丢失毫秒
- go - go build 找不到修订版
- python - 生成频率为 x 持续时间为 y 的音调,并在音调期间保持其他代码执行
- hadoop - Pig:错误 1045:无法将 COUNT 的匹配函数推断为多个匹配或都不匹配。请使用显式演员表
- azure-cosmosdb-mongoapi - 选择每个标题查询的所有总计
- php - 无法从气象站解析 json 数组