繁体   English   中英

javascript使用未定义的值减少sum数组

[英]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 || 值( undefinednull0''等等)的默认值 , 喜欢

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#reduceArray#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM