Я написал Javascript код для l oop через массив, включающий информацию о некоторых ресторанах. Когда это применимо, l oop проверяет расстояние между устройством пользователя и рестораном и изменяет объект ресторана в массиве, чтобы включить известное расстояние.
В приведенном ниже коде мы через l oop массив, и если мы определим, что ресторан является цепочкой (ie. у него нет доступных координат), мы пропускаем его. В противном случае мы определяем расстояние между почтовым индексом пользователя и известными координатами ресторана с помощью API Google Maps Javascript.
for (var i = 0; i < restaurantMetadata.length; i++) {
console.log(i);
var rst = restaurantMetadata[i];
if (rst["chain"]) {} else {
console.log("getting distance");
var zip = window.localStorage.getItem("zipcode");
var coords = new google.maps.LatLng(rstLat, rstLon);
var distanceService = new google.maps.DistanceMatrixService;
distanceService.getDistanceMatrix({
origins: [zip],
destinations: [coords],
travelMode: "DRIVING"
}, function(result) {
restaurantMetadata[i]["distance"] = Math.round(((result.rows[0].elements[0].distance.value) / 1000) * 10)/10;
});
}
}
}
Кажется, что расстояние работает нормально, но после ошибки результат получен:
TypeError: restaurantMetadata[i] is undefined
Запись i
на консоль, как показано в строке 2 выше, показывает 0 1 2 3
как следует, но позже, когда я регистрирую его в теле результата, он получает целых четыре, но дважды подряд. Есть ли причина для такого поведения? Сначала я подумал, что, может быть, i
каким-то образом меняется, но я не могу найти причину для этого.