rin*_*hik 5 javascript arrays multidimensional-array google-geocoder
我目前正在使用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]
];
Run Code Online (Sandbox Code Playgroud)
但动态!我需要这个数组以后将引脚放在地图上.
我在做什么:
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);
Run Code Online (Sandbox Code Playgroud)
问题,问题:
我没有看到任何错误,但在最后位置[]数组是空的.
如果需要,这是一个控制台屏幕:
我没有时间测试代码,但它应该这样工作:
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, Hyannis, 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);
});
Run Code Online (Sandbox Code Playgroud)
您的代码的问题如下。首先执行这部分代码:
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) {
//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);
Run Code Online (Sandbox Code Playgroud)
之后,一旦浏览器从服务器接收到数据,回调本身就会被调用:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9357 次 |
| 最近记录: |