Javascript的切片不工作
我在PHP文件中声明了一些全局变量:Javascript的切片不工作,javascript,Javascript,我在PHP文件中声明了一些全局变量: var coordinates = []; var joined_data = []; 变量坐标最初是用从XMLHttpRequest接收的一些数据设置的,连接的数据被设置为等于坐标。 稍后,将调用一个函数: function addMarkerToWps(wp_id) { joined_data = coordinates.slice(0, coordinates.length-5); calculateRoutes(); } 这段短
var coordinates = [];
var joined_data = [];
变量坐标最初是用从XMLHttpRequest接收的一些数据设置的,连接的数据被设置为等于坐标。
稍后,将调用一个函数:
function addMarkerToWps(wp_id)
{
joined_data = coordinates.slice(0, coordinates.length-5);
calculateRoutes();
}
这段短代码应该选择一个子数组并将其保存到联合_数据中;函数CalculatorOutes使用Google API在地图上绘制路径;在这个函数的末尾,我尝试显示两个数组的长度,我希望连接的数据比坐标短,但我发现它们的大小相同。
所以,我怀疑slice函数以某种方式失败了。
以下是函数CalculatorOutes:
你能发现错误吗?谢谢。我们需要一些代码来发现错误。你能用小提琴再现这个问题吗?请参阅切片功能没有失败。我的感觉是。。您请求的数组长度没有那么长。。表示如果数组长度为3。。你把它限制在3-5。也就是-2。。无法索引和切片..我也尝试了coordinates.length-5,因为知道它应该可以工作,因为coordinates数组最初有8个元素,但没有任何更改。关于我的问题,坐标数组包含一组要在地图上显示的坐标。现在,我试图在地图上只显示坐标的子集,在给定的代码中没有太可疑的东西。对于调试,可以添加console.logcoordinates.length、joined_data.length;在调用CalculatorOutes之前添加到addMarkerToWps中的第二行;对于第一行计算器,你们从中得到了什么结果?作为一种可能的解释,变量作用域可能会导致这种行为,但如果看不到完整的代码,就无法判断。@ameenulla0007-也可以在切片中使用负索引,从数组末尾进行选择。所以语法是正确的,在任何情况下都应该返回比原始数组短的新数组。我们需要一些代码来发现错误。你能用小提琴再现这个问题吗?请参阅切片功能没有失败。我的感觉是。。您请求的数组长度没有那么长。。表示如果数组长度为3。。你把它限制在3-5。也就是-2。。无法索引和切片..我也尝试了coordinates.length-5,因为知道它应该可以工作,因为coordinates数组最初有8个元素,但没有任何更改。关于我的问题,坐标数组包含一组要在地图上显示的坐标。现在,我试图在地图上只显示坐标的子集,在给定的代码中没有太可疑的东西。对于调试,可以添加console.logcoordinates.length、joined_data.length;在调用CalculatorOutes之前添加到addMarkerToWps中的第二行;对于第一行计算器,你们从中得到了什么结果?作为一种可能的解释,变量作用域可能会导致这种行为,但如果看不到完整的代码,就无法判断。@ameenulla0007-也可以在切片中使用负索引,从数组末尾进行选择。所以语法是正确的,在任何情况下都应该返回比原始数组短的新数组。
function calculateRoutes()
{
// remove previous route
removeRoutes();
//window.alert('Numero punti ' + coordinates.length);
// set start position
//var begin = new google.maps.LatLng(coordinates[0].Lat, coordinates[0].Lon);
var begin = new google.maps.LatLng(joined_data[0].Lat, joined_data[0].Lon);
// set end position
var end = null;
// waypoints struct
var waypoints = [];
// counter
var wCount = 0;
// loop
var i;
//for(i=1; i<coordinates.length-1; i++)
for(i=1; i<joined_data.length-1; i++)
{
if(wCount === REQUEST_WAYPOINTS_LIMIT)
{
// increment counter to get end's index
i++;
// set end
//end = new google.maps.LatLng(coordinates[i].Lat, coordinates[i].Lon);
end = new google.maps.LatLng(joined_data[i].Lat, joined_data[i].Lon);
// draw current route
drawRoute(begin, end, waypoints);
// update indeces
begin = end;
// reset structures
wCount = 0;
waypoints = [];
}
// add waypoint to list
waypoints.push
(
{
//location: new google.maps.LatLng(coordinates[i].Lat, coordinates[i].Lon),
location: new google.maps.LatLng(joined_data[i].Lat, joined_data[i].Lon),
stopover: true
}
);
// increments counter
wCount++;
}
if(waypoints.length > 0)
{
//end = new google.maps.LatLng(coordinates[coordinates.length-1].Lat, coordinates[coordinates.length-1].Lon);
end = new google.maps.LatLng(joined_data[joined_data.length-1].Lat, joined_data[joined_data.length-1].Lon);
drawRoute(begin, end, waypoints);
}
for(var i = 0; i<coordinates.length; i++)
{
placeMarker(coordinates[i].Lat, coordinates[i].Lon, "http://gmaps-samples.googlecode.com/svn/trunk/markers/red/blank.png");
}
for(var j = 0; j<interest_points.length; j++)
{
placeAttractionMarker(
interest_points[j].Lat,
interest_points[j].Lon,
"http://gmaps-samples.googlecode.com/svn/trunk/markers/orange/blank.png",
interest_points[j].Name,
interest_points[j].Wikipedia,
j
);
}
//joinData();
//window.alert("" + coordinates.length + " " + interest_points.length + " " + joined_data.length);
window.alert("" + coordinates.length + " " + joined_data.length);
}