JavaScript总返回数NaN

JavaScript总返回数NaN,javascript,arrays,sum,Javascript,Arrays,Sum,我试图使用JavaScript对一组对象求和,但它没有显示86的预期结果,而是显示NaN 注意:我无法编辑对象数组 var objects=[{“ID”:--“},{“ID”:“58”},{“ID”:“28”}]; var总和=0; id=对象; 对于(变量i=0;i>>0}然后求和+=float(id[i].id)例如 var value = parseInt(id[i].ID. 10); var valid = isNaN(value); if (valid){ sum += val

我试图使用JavaScript对一组对象求和,但它没有显示86的预期结果,而是显示
NaN

注意:我无法编辑对象数组

var objects=[{“ID”:--“},{“ID”:“58”},{“ID”:“28”}];
var总和=0;
id=对象;
对于(变量i=0;i

您可以插入一个检查,检查值是否正确

var objects=[{“ID”:--“},{“ID”:“58”},{“ID”:“28”}];
var总和=0;
id=对象;
对于(变量i=0;i

您的第一个数据点是
{“ID”:“-”}

您不能添加
--
并从中获取整数

“--”+1
NaN

如果希望返回实际数字,则必须添加实际数字


更新

如果需要检查值,请在循环内部使用
parseInt
isNaN


var value = parseInt(id[i].ID. 10);
var valid = isNaN(value);
if (valid){
  sum += value;
}

您可以使用
isNaN
type check检查任何值的有效性(means不是数字)。如果
ID
是数字或字符串编号,则类型检查器将返回false

var objects=[{“ID”:--“},{“ID”:“58”},{“ID”:“28”}];
var sum=objects.reduce((s,o)=>console.log(o.ID)| | s+(isNaN(o.ID)?0:+o.ID),0);

console.log('Total:'+sum)
使用
Number
构造函数、
isNan
函数和
documentFragment
只做一个循环而不是两个循环)的优化版本:

var objects=[{“ID”:--“},{“ID”:“58”},{“ID”:“28”}];
var sum=0,hereEl=document.getElementById('here'),
f=document.createDocumentFragment();
对象。forEach(函数(键){
var p=document.createElement(“p”),num=Number(key.ID);
p、 innerHTML=key.ID;
sum+=!isNaN(num)?num:0;
f、 儿童(p);
});
hereEl.innerHTML=“总计:”+总和;
(f)儿童

我明白了。我无法编辑对象数组,只能编辑后面的代码。在保持
{“ID”:“-“}
的同时,有没有办法解决这个问题?您必须使用
parseInt
isNaN
来检查它是否有效value@TheCodesee,3个实用程序:
函数float(v){return+v||0}函数int(v){return v|0}函数uint(v){return v>>>0}
然后
求和+=float(id[i].id)
例如

var value = parseInt(id[i].ID. 10);
var valid = isNaN(value);
if (valid){
  sum += value;
}