在JavaScript中计算数组的数值之和
我有以下数组:在JavaScript中计算数组的数值之和,javascript,arrays,Javascript,Arrays,我有以下数组: myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"]; 要计算只包含数字的数组的和非常简单,但是如果还有必须忽略的非数值,该如何计算呢?使用reduce和isNaN var arr = [32.4, "bla", 1.44, 0.5, 65.8, "abc"]; var output = arr.reduce( ( a, c ) => a + ( isNaN( c ) ? 0 : c ), 0 ); 演示 var-arr=[3
myArray = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
要计算只包含数字的数组的
和
非常简单,但是如果还有必须忽略的非数值,该如何计算呢?使用reduce
和isNaN
var arr = [32.4, "bla", 1.44, 0.5, 65.8, "abc"];
var output = arr.reduce( ( a, c ) => a + ( isNaN( c ) ? 0 : c ), 0 );
演示
var-arr=[32.4,“bla”,1.44,0.5,65.8,“abc”];
var输出=arr.reduce((a,c)=>a+(isNaN(c)?0:c,0);
console.log(output.toFixed(2))代码>您可以将函数与结合使用来检查您是否有数字
var myArray=[32.4,“bla”,1.44,0.5,65.8,“abc”];
var res=myArray.reduce(函数(acc,curr){
返回acc+(isNaN(当前)?0:当前);
});
控制台日志(res)
您可以使用array.prototype.filter
和array.prototype.reduce
:
var myArray=[32.4,“bla”,1.44,0.5,65.8,“abc”];
var sum=myArray.filter(n=>!isNaN(n)).reduce((m,n)=>m+n);
控制台日志(总和)代码>使用。减少并使用isNaN()检查元素是否为数字
如果要添加表示数字的字符串,则可以使用:
var myArray=[32.4,“bla”,1.44,0.5,65.8,“abc”];
var sum=myArray.reduce((acc,el)=>acc+(!isNaN(el)?+el:0));
控制台日志(总和)代码>
然后计算数字之和
将所有内容解析为数字并检查NaN
var sum = 0
myArray.forEach(el => {
if(!Number.isNaN(parseFloat(el))) sum += parseFloat(el)
})
此解决方案也适用于字符串表示数字的数组,如[“4.5”、“5”、“a”、10](将给出19.5)
如果您不希望出现这种行为,最好检查以下类型:
var sum = 0
myArray.forEach(el => sum += (typeof el == "number" ? el : 0))
我甚至会将上面的两个答案结合起来,使用常见的Map Reduce策略:
var numbers = myArray.map((value) => {
value = parseFloat(value);
if(isNaN(value)) value = 0;
}).reduce(function(acc, curr){
return acc + (isNaN(curr) ? 0 : curr);
});
当然,您可以按Map或reduce函数中的所有内容,但正如我所学的那样,Map函数以适当的形式准备值,然后reduces函数的目标只是使用给定的函数/策略将所有可用值合并为一个值
(如果有语法错误,我很抱歉,我只在Swift atm中编码。)检查类型a.filter(Number.isFinite)。reduce((x,y)=>x+y)
trymyArray=[“1”、“2”、“3”]
trymyArray=[“1”、“2”、“3”]
)
var numbers = myArray.map((value) => {
value = parseFloat(value);
if(isNaN(value)) value = 0;
}).reduce(function(acc, curr){
return acc + (isNaN(curr) ? 0 : curr);
});