我有这个带数字的简单数组:
var arr = [100,200,undefined,450,300];
Run Code Online (Sandbox Code Playgroud)
我想用它reduce来快速总结那个数组中的值,就像这样......
var total = arr.reduce( function( s, v ){ return s += v } );
Run Code Online (Sandbox Code Playgroud)
在return我得到NaN.
有没有办法reduce使用未定义的值对数组中的值求和?像一面旗帜或什么......谢谢!
你可以使用默认值falsy值(undefined,null,0,'',有的更多)与逻辑OR||,像
v || 0
Run Code Online (Sandbox Code Playgroud)
这意味着如果v是一个真正的价值,那么取这个值,如果不是,则取零.
var arr = [100, 200, undefined, 450, 300],
total = arr.reduce(function (s, v) { return s + (v || 0); }, 0);
console.log(total);Run Code Online (Sandbox Code Playgroud)
顺便说一句,
s += v
^
Run Code Online (Sandbox Code Playgroud)
没有必要,因为你不再使用s该功能了.返回值是s下一个循环中的新值.回调的变量是独立的,它们有自己的范围.
根据评论,如果给出了不需要的各种类型的项目,则需要规范化数据.
过滤不需要的部分
.filter(v => !isNaN(v))
Run Code Online (Sandbox Code Playgroud)将想要的部件转换为相同的类型
.map(Number)
Run Code Online (Sandbox Code Playgroud)然后你需要一个折叠数据的函数,只得到两个值的singel值,比如加法.
function add(a, b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)这个功能现在被用作回调Array#reduce与
initialValue(可选的)用作第一次调用的第一个参数的值
callback.如果未提供初始值,则将使用数组中的第一个元素.调用reduce()没有初始值的空数组是一个错误.
result = array
.filter(v => !isNaN(v))
.map(Number)
.reduce(add, 0);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |