[英]How to get sum of all value in for loop JavaScript?
我試過計算谷歌地圖上卡車標記的距離。
var Total=0;
var json = result.d;
obj = JSON.parse(json);
for (var i = 0; i < obj.length; i++)
{
var LatLng1 = new google.maps.LatLng(obj[i].Lat, obj[i].Lng);
var LatLng2 = new google.maps.LatLng(obj[i+1].Lat, obj[i+1].Lng);
var Distance=(google.maps.geometry.spherical.computeDistanceBetween(LatLng1, LatLng2) / 1000).toFixed(2);
Total+=Distance;
alert(Total); //It is working but.Like this : 0.01 0.22 0.03 0.045
// I want to be 0.01+0.022+0.03+....=Total
}
alert(Total); //Does not working !!
我在控制台收到此錯誤: TypeError: obj[(i + 1)] is undefined.
我哪里錯了?
你的循環條件是i < obj.length
但是,在稍后的代碼中,您將使用obj[i+1]
。
結果,在最后一次交互中,您將使用obj[obj.length]
。
要解決您的問題,您要么必須減少一次迭代,要么在數組末尾有特殊情況。 選擇取決於您要達到的目標(例如:您可能希望在最后一個和第一個之間保持距離)。
試試這個代碼:
var Total=0;
var json = result.d;
obj = JSON.parse(json);
for (var i = 0; i < obj.length -1; i++)
{
var LatLng1 = new google.maps.LatLng(obj[i].Lat, obj[i].Lng);
var LatLng2 = new google.maps.LatLng(obj[i+1].Lat, obj[i+1].Lng);
var Distance=(google.maps.geometry.spherical.computeDistanceBetween(LatLng1, LatLng2) / 1000);
Total+=Distance;
}
alert(Total); //It will work
它不能更早地工作的原因是,每次訪問obj.length索引中的元素時都會出現異常。 我猜您沒有在瀏覽器中使用開發人員工具來發現異常。
如fxm所述,您循環了一個額外的時間,這打破了循環的上限
所以我建議你改變這個
for (var i = 0; i < obj.length; i++)
對此
for (var i = 0, l = obj.length - 1; i < l; i++)
您正在嘗試訪問obj [i + 1],但i + 1 =上一次迭代的長度。 您應該從0迭代到obj.lenght-1。
您的代碼必須是:
var Total = 0;
var json = result.d;
obj = JSON.parse(json);
for (var i = 0; i < obj.length-1; i++) { // Max is length-1 !
var LatLng1 = new google.maps.LatLng(obj[i].Lat, obj[i].Lng);
var LatLng2 = new google.maps.LatLng(obj[i + 1].Lat, obj[i + 1].Lng);
var Distance = (google.maps.geometry.spherical.computeDistanceBetween(LatLng1, LatLng2) / 1000).toFixed(2);
Total += Distance;
alert(Total);
}
alert(Total);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.