[英]javascript reduce sum array with undefined values
我有这个带数字的简单数组:
var arr = [100,200,undefined,450,300];
我想用reduce
来快速总结那个数组中的值,就像这样...
var total = arr.reduce( function( s, v ){ return s += v } );
作为return
我得到了NaN
。
有没有办法使用未定义的值reduce
数组中的和值? 像一面旗帜或什么......谢谢!
您可以使用逻辑OR ||
伪值( undefined
, null
, 0
, ''
等等)的默认值 , 喜欢
v || 0
这意味着如果v
是真值,则取该值,如果不是,则取零。
var arr = [100, 200, undefined, 450, 300], total = arr.reduce(function (s, v) { return s + (v || 0); }, 0); console.log(total);
顺便说一句,
s += v
^
没有必要,因为你不再在函数中使用s
了。 返回值是下一循环中s
的新值。 回调的变量是独立的,它们有自己的范围。
根据评论,如果给出了不需要的各种类型的项目,则需要规范化数据。
过滤不需要的部分
.filter(v => !isNaN(v))
将想要的部件转换为相同的类型
.map(Number)
然后你需要一个折叠数据的函数,只得到两个值的singel值,比如加法。
function add(a, b) { return a + b; }
此函数现在用作带Array#reduce
的Array#reduce
回调
initialValue
(可选)用作第一次调用
callback
的第一个参数的值。 如果未提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用reduce()
是一个错误。
result = array .filter(v => !isNaN(v)) .map(Number) .reduce(add, 0);
您可以在减少数组之前过滤掉非数字。
这不是减少列表的最有效方法,但它是最明确的分离功能的地方,因此您可以轻松地遵循逻辑而无需阅读更复杂的逻辑。
var arr = [100,200,undefined,450,300,'string']; var total = arr .filter(function(x) { return typeof(x) === 'number'}) // remove any non numbers .reduce(function( s, v ){ return s + Number(v) }, 0); console.log( total )
只有三元应该做
var arr = [100, 200, undefined, 450, 300]; var total = arr.reduce(function(s, v) { return v ? s += v : s += 0 }); console.log(total);
尝试使用filter()
:
var arr = [100,200,undefined,450,300]; var total = arr.filter(i=>i != undefined).reduce( function( s, v ){ return s += v; }, 0); console.log(total)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.