簡體   English   中英

JavaScript Total返回NaN

[英]JavaScript Total Returns NaN

我試圖使用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返回NaN的副本, 當和值為因為我已經有代碼行var sum = 0;

如果值為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> 

您的第一個數據點是{"ID":"--"}

你不能添加--並從中獲取一個整數。

"--" + 1NaN

如果您希望此返回實際數字,則必須添加實際數字


更新

如果需要檢查值,請在循環中使用parseIntisNaN


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

您可以使用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); 

使用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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM