我目前正在使用Google地图的地理编码,需要创建一个包含数组作为元素的数组.
基本上我需要创建这个:
var locations = [ ['Bondi Beach',-33.890542,151.274856,4],['Coogee Beach',-33.923036,151.259052,5],['Cronulla Beach',-34.028249,151.157507,3],['Manly Beach',-33.80010128657071,151.28747820854187,2],['Maroubra Beach',-33.950198,151.259302,1] ];
但动态!
我需要这个数组以后将引脚放在地图上.
我在做什么:
var locations = []; // The initial array for (var i = 0; i < addresses.length; ++i){ var address=addresses[i]; // the address e.g. 15 Main St,Hyannis,MA geocoder.geocode({ 'address': address},function(results){ var obj = { 0: address,1: results[0].geometry.location.hb,2: results[0].geometry.location.ib,3: i }; console.log(obj); locations.push(new Array()); locations[i].push(obj); }); }; console.log(locations.length);
问题,问题:
我没有看到任何错误,但在最后位置[]数组是空的.
如果需要,这是一个控制台屏幕:
解决方法
我没有时间测试代码,但它应该这样工作:
function requestLocations( addresses,callback ) { var remainingLocations = addresses.length; var locations = []; for (var i = 0; i < addresses.length; ++i){ var address=addresses[i]; // the address e.g. 15 Main St,MA locations[i] = []; geocoder.geocode({ 'address': address},( function(idx) { return function(result) { locations[idx] = [ addresses[idx],results[0].geometry.location.hb,results[0].geometry.location.ib,idx ]; //decrement the number of remaining addresses --remainingLocations; //if there are no more remaining addresses and a callback is provided then call this calback with the locations if( remainingLocations === 0 && callback ) { callback(locations); } }; // returns the real callback function for your geocoding })(i) //direct invocation of function with paramter i for scoping ); } } requestLocations(addresses,function( locations ) { console.dir(locations); console.log(locations.length); });
代码问题如下.首先执行这部分代码:
var locations = []; // The initial array for (var i = 0; i < addresses.length; ++i) { var address = addresses[i]; // the address e.g. 15 Main St,MA geocoder.geocode({ 'address': address },function(results) { //this part is called later when that data is ready (it is an asynchronous callback) }); }; //because of the async request this is still 0 console.log(locations.length);
之后,只要浏览器从服务器接收数据,就会调用回调本身:
function(results) { var obj = { 0: address,3: i }; console.log(obj); locations.push(new Array()); locations[i].push(obj); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。