Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用reduce仅对具有不同值类型的数组中的数字求和?_Javascript_Arrays_Ecmascript 6_Sum_Reduce - Fatal编程技术网

Javascript 如何使用reduce仅对具有不同值类型的数组中的数字求和?

Javascript 如何使用reduce仅对具有不同值类型的数组中的数字求和?,javascript,arrays,ecmascript-6,sum,reduce,Javascript,Arrays,Ecmascript 6,Sum,Reduce,我只需要使用reduce对这个数组的数求和,但我不知道如何进行 这是我的代码和我的尝试: let arr = [1,2,3,4,6,true,"Dio Brando", false,10,"yare yare"]; let sum = arr.reduce((a.b)=> typeOf.a =="number" && typeOf.b =="number"? a+b :false) console.log(sum); 好的,这就可以了。如果你愿意,你可以美化if语句:

我只需要使用
reduce
对这个数组的数求和,但我不知道如何进行

这是我的代码和我的尝试:

let arr = [1,2,3,4,6,true,"Dio Brando", false,10,"yare yare"];

let sum = arr.reduce((a.b)=> typeOf.a =="number" && typeOf.b =="number"? a+b :false)
console.log(sum);

好的,这就可以了。如果你愿意,你可以美化if语句:

let sum = arr.reduce((prevVal, currVal, index)=> {
 if (typeof prevVal =="number" && typeof currVal =="number"){
  return currVal+prevVal;
 } else {
   return prevVal;
}
});

您有一些语法错误和逻辑错误

  • 没有
    typeOf
    ,它是
    typeOf
    接受操作数,而不是属性:
    typeOf a
  • 参数之间用逗号分隔,而不是点:
    (a,b)=>
如果提供一个起始值(
0
),则只需检查第二个参数的类型就可以了。我还建议给参数起一个比单个字母
a
s和
b
s更直观的名字

arr.reduce((sum, value) => (typeof value == "number" ? sum + value : sum), 0);

您需要为下一次迭代返回聚合值(
sum
,因为它是一个sum)。如果返回
false
,则会丢失整个总和。

您需要进行以下更改:

  • (a.b)应该是(a,b),它是带参数的函数
  • 没有“typeOf.a”这个词,它应该是“typeOf a”
我重写了一些更有用的变量名来解释reduce中发生了什么

const arr=[1,2,3,4,6,true,“Dio Brando”,false,10,“yare yare”];
const sum=arr.reduce((sumSoFar,nextValue)=>{
if(nextValue的类型==“number”&&isFinite(nextValue)){
返回sumSoFar+nextValue;
}
//否则跳过
返回苏姆索法;
}, 0); //从零开始求和

控制台日志(总和)你可以短路parseFloat
让res=arr.reduce((s,v)=>(parseFloat(v)| | 0)+s,0)谢谢,这是我在这里的第一个问题..谢谢你的时间,你的索引0的提示非常有用:我不确定
是否是有限的
。为什么需要检查?防止像NaN(不是数字)这样的求和。只是预防措施而已!但是我会用
!而是isNaN
。在我看来,如果数组中出现
Infinity
,那么应该可以得到
Infinity
作为和。是的,足够公平-取决于我猜的用例!在担心像这样的高级操作之前,您需要学习基本的Javascript语法。