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”
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语法。