javascript - 用初始值减少javascript
问题描述
我正在尝试将数组减少为其偶数值的总和。我一直在检查 MDN 的文档 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
这表示如果提供了初始值,那么它不会跳过第 0 个索引,实际上它将从索引 0 开始。我的问题是 reduce 从索引 1 开始。因此,我的结果不正确。我确定我阅读文件不正确或误解了它。这是我指的注释 - “注意:如果未提供 initialValue,reduce() 将从索引 1 开始执行回调函数,跳过第一个索引。如果提供了 initialValue,它将从索引 0 开始。”
这是我的代码。
var array = [1,2,3,4,6,100];
var initialValue = 0;
var value = array.reduce(function(accumulator, currentValue, currentIndex, array, initialValue) {
//console.log(accumulator);
if( currentValue % 2 === 0) {
accumulator += currentValue;
//return accumulator;
}
return accumulator;
});
console.log(value);
显然,我看到的结果是 113 而不是 112。我猜,这是因为 accumulator 已经有一个值 1。因此,它最初是加 1。
解决方案
如果你再看一下文档,你会注意到callbackFn
最多只需要 4 个变量,并且initialValue
必须在第二个参数上
arr.reduce(callback( accumulator, currentValue, [, index[, array]] )[, initialValue])
^ ^
这是112
按预期返回的小修复版本
var array = [1,2,3,4,6,100];
var initialValue = 0;
var value = array.reduce(function(accumulator, currentValue, currentIndex, array) {
//console.log(accumulator);
if( currentValue % 2 === 0) {
accumulator += currentValue;
//return accumulator;
}
return accumulator;
}, initialValue);
console.log(value);
推荐阅读
- ios - 当 iPhone 设备进入 iBeacon 范围时广播弹出消息
- java - 如何在Android Q中检测拨出电话号码
- ionic-framework - Cordova 相机插件
- jquery - 如何在日历中禁用回溯日期
- javascript - 为什么伪类 :active 不起作用?
- actions-on-google - 印地语更正后无法完成操作提交
- python-3.x - 进程完成但无法加入?
- android - Android Textview改变行距/填充
- javascript - android键盘:在输入表单点击页面向下滚动,点击外部向上滚动
- python - 根据条件处理数据框列以在没有for循环的情况下列出的优化方法?