Javascript长度在Array上的结果不同
Javascript length result different on Array
我目前正在使用Google Maps API v3,jQuery和MarkerClusterer。
我注意到"长度"结果存在一个奇怪的问题。因此,我将向您展示我的注释代码:
文件 data.json 包含大约 1800 个对象。
function initialize() {
$('#map_canvas').gmap({'zoom': 6, 'center': (new google.maps.LatLng(46.679594, 2.109375)), 'mapTypeId': google.maps.MapTypeId.ROADMAP, 'disableDefaultUI':true}).bind('init', function(evt, map) {
var mstime = new Date().getTime(); // to avoid caching
var markerslist = new Array(); // This array will gets points informations
$.getJSON('data.json?'+mstime, function(data) {
for (var i = 0; i < data.markers.length; i++) {
var val = data.markers[i];
var t = new Object();
t.lat = val.lat;
t.lng = val.lng;
t.name = val.label;
markerslist.push(t); // pushing point info in markerslist
}
});
alert(markerslist.length); // This first alert returns "0" !
alert(markerslist.length); // This new return the right count (about 1800). Weird!
for( var i = 0; i < markerslist.length; i++ ) { // To create markers on map
$('#map_canvas').gmap('addMarker', {
'position': new google.maps.LatLng(markerslist[i].lat, markerslist[i].lng)
}).click(function() {
$('#map_canvas').gmap('openInfoWindow', { content : 'Hello world!' }, this);
});
}
$('#map_canvas').gmap('set', 'MarkerClusterer', new MarkerClusterer(map, $(this).gmap('get', 'markers')));
});
}
总而言之,这段代码至少可以与一个警报完美配合......如果删除两个警报,则此代码不起作用。
谢谢你的帮助,问候
getJSON
调用是异步的。 这样做的结果是在调用回调之前,执行流在调用之后继续进行。 您需要添加依赖于对回调函数的调用结果的任何代码,而不是将其放在调用 getJSON
之后。
注意:对于代码示例,我只是复制了您的代码并将其移动。 既然您知道所有代码都需要在回调中,我相信您将能够对其进行优化以消除对临时数组的需求。
$.getJSON('data.json?'+mstime, function(data) {
for (var i = 0; i < data.markers.length; i++) {
var val = data.markers[i];
var t = new Object();
t.lat = val.lat;
t.lng = val.lng;
t.name = val.label;
markerslist.push(t); // pushing point info in markerslist
}
alert(markerslist.length); // it will be correct here
// now do the rest
for( var i = 0; i < markerslist.length; i++ ) { // To create markers on map
$('#map_canvas').gmap('addMarker', {
'position': new google.maps.LatLng(markerslist[i].lat, markerslist[i].lng)
}).click(function() {
$('#map_canvas').gmap('openInfoWindow', { content : 'Hello world!' }, this);
});
}
$('#map_canvas').gmap('set', 'MarkerClusterer', new MarkerClusterer(map, $(this).gmap('get', 'markers')));
}); // and finally close the callback
相关文章:
- 从Node.js上的mysql结果JSON中获取一个Array值
- Javascript长度在Array上的结果不同
- javascript array.length 函数的奇怪结果
- 当元素相等时,Array.sort() 会产生意想不到的结果
- Array.sort在IOS中得到不同的结果
- 从Array结果中获取两个文件
- async.waterfall只返回函数数组(node js)的array[0]索引处的函数的结果集
- array.pop()和console.log()发出奇怪的结果
- 将Array.map()与parseInt结合使用会产生意外的结果
- javascript array.push(array.prush(x))奇怪的结果
- 将array.filter()的结果赋值给同一个数组是否安全?
- Javascript, array concat将Windows Object添加到结果数组中,但它不适用于Firefo
- JSON计算特定Array对象的总数和结果分组
- 使用Array.reduce得到奇怪的结果
- 与Array.join()的结果不同
- array.splice的意外结果
- 为什么在字符串数组上使用array .map(parseInt)会产生不同的结果?
- array.push()但在array中没有结果
- 有人能解释为什么array.length会在这里返回两个不同的结果吗
- jQuery JSON结果中的ForEach Array值