我正在尝试使用JavaScript对一组对象求和,但不显示86的预期结果,而是显示NaN
。
注意:我无法编辑对象数组!
var objects = [{"ID":"--"},{"ID":"58"},{"ID":"28"}];
var sum = 0;
id = objects;
for (var i = 0; i < id.length; i++) {
sum += +id[i].ID;
}
document.getElementById('here').innerHTML = "<b>Total:</b>" + sum;
objects.forEach(function(key) {
var a = document.createElement("p");
a.innerHTML = key.ID;
document.getElementById('here').appendChild(a);
});
<div id="here"></div>
JsFiddle:https://jsfiddle.net/ru266x7m/
请注意,这不是Object returning NaN when sum values的重复,因为我已经拥有代码行var sum = 0;
答案 0 :(得分:6)
您可以插入检查值isFinite。
if (isFinite(id[i].ID)) {
sum += +id[i].ID;
}
var objects = [{"ID":"--"},{"ID":"58"},{"ID":"28"}];
var sum = 0;
id = objects;
for (var i = 0; i < id.length; i++) {
if (isFinite(id[i].ID)) {
sum += +id[i].ID;
}
}
document.getElementById('here').innerHTML = "<b>Total: </b>" + sum;
objects.forEach(function(key) {
var a = document.createElement("p");
a.innerHTML = key.ID;
document.getElementById('here').appendChild(a);
});
<div id="here"></div>
答案 1 :(得分:2)
您的第一个数据点是{"ID":"--"}
您无法添加--
并从中获取整数。
"--" + 1
是NaN
如果您希望此返回实际数字,则必须添加实际数字
更新
如果您需要检查值,请在循环中使用parseInt
和isNaN
var value = parseInt(id[i].ID. 10);
var valid = isNaN(value);
if (valid){
sum += value;
}
答案 2 :(得分:0)
您可以使用isNaN
类型检查检查任何值的有效性(表示不是数字)。如果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);
&#13;
答案 3 :(得分:0)
使用Number
构造函数,isNan
函数和documentFragment
(只生成一个循环而不是两个)的优化版本:
var objects = [{"ID":"--"},{"ID":"58"},{"ID":"28"}];
var sum = 0, hereEl = document.getElementById('here'),
f = document.createDocumentFragment();
objects.forEach(function(key) {
var p = document.createElement("p"), num = Number(key.ID);
p.innerHTML = key.ID;
sum += !isNaN(num)? num : 0;
f.appendChild(p);
});
hereEl.innerHTML = "<b>Total:</b>" + sum;
hereEl.appendChild(f);
<div id="here"></div>