我尝试在谷歌地图上计算卡车标记的距离。
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.
我哪里错了?
答案 0 :(得分:5)
您的循环条件为i < obj.length
但是,稍后在您的代码中,您使用的是obj[i+1]
。
因此,在您上次的互动中,您将使用obj[obj.length]
。
要解决您的问题,您要么必须少做一次迭代,要么在数组末尾有一个特殊情况。选择取决于你想要达到的目标(例如:你可能希望得到最后一个和第一个之间的距离)。
答案 1 :(得分:2)
试试这段代码:
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 index时的元素时都会遇到异常。我猜你没有在浏览器中查看开发人员工具以找到异常。
答案 2 :(得分:1)
正如所说fxm,你循环一个额外的时间,打破你的循环的上边界
所以我建议你改变这个
for (var i = 0; i < obj.length; i++)
到这个
for (var i = 0, l = obj.length - 1; i < l; i++)
答案 3 :(得分:1)
您正在尝试访问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);