У меня есть некоторый опыт программирования, но я новичок в Javascript.
Я пытаюсь создать html-файл, который показывает карту Google и поставить на него несколько маркеров.
Он отлично работает, когда я делаю это по одному маркеру за раз, например:
function initMap() {
var map = ...;
var icon = ...;
var pt1 = {lat: ..., lng: ...};
var marker1 = new google.maps.Marker({
position: pt1,
map: map,
icon: icon,
label: {..., text: '1'},
title: 'Marker 1'
});
var pt2 = {lat: ..., lng: ...};
var marker2 = new google.maps.Marker({
position: pt2,
map: map,
icon: icon,
label: {..., text: '2'},
title: 'Marker 2'
});
var pt3 = {lat: ..., lng: ...};
var marker3 = new google.maps.Marker({
position: pt3,
map: map,
icon: icon,
label: {..., text: '3'},
title: 'Marker 3'
});
}
Теперь я попытался поместить определение маркеров в массив и создание маркеров в цикле, но не могу заставить его работать.
Я пробовал вот так:
var places = [
{id: 1, lat: ..., lng: ..., title: 'Marker 1'},
{id: 2, lat: ..., lng: ..., title: 'Marker 2'},
{id: 3, lat: ..., lng: ..., title: 'Marker 3'}
]
function initMap() {
var map = ...;
var icon = ...;
for(var i=0; i<places.length; i++) {
var marker = new google.maps.Marker({
position: {lat: places[i].lat, lng: places[i].lng},
map: map,
icon: icon,
label: {..., text: ''+places[i].id},
title: places[i].title
});
}
}
Помещение window.alert(places[i].title) внутрь цикла показывает мне все заголовки, поэтому определение массива и заголовок цикла кажутся нормальными. Но как только я пытаюсь создать маркеры внутри цикла, карта и маркеры не отображаются, поэтому я предполагаю, что это какая-то ошибка, но я не могу ее понять.
Видите ли вы какие-нибудь синтаксические ошибки, которые я сделал?
Спасибо, упоминание консоли было правильным советом. Так много нужно узнать об отладке javascript. У меня было несколько ошибок, все они произошли из-за того, что я использовал Notepad ++ только в качестве среды разработки (без проверки кода). Есть ли бесплатная среда разработки для javascript с intellisense и проверкой кода, например Visual Studio для .NET?
VS Code (бесплатно) или Web Storm (платно).
Если вы студент, у вас может быть бесплатная лицензия с идеей intelliJ, действительно хороший ide для Интернета, иначе есть атом, затмение ... P.s. привыкайте проверять / всегда открывать ошибку консоли браузера, это вам очень помогает! : D



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы каждый раз перезаписываете "маркерную" переменную.
var marker = new google.maps.Marker ({
Вам нужно будет создать массив для маркеров, как вы делали для точек (широта, долгота, плитка).
Так должно быть:
var places = [
{id: 1, lat: ..., lng: ..., title: 'Marker 1'},
{id: 2, lat: ..., lng: ..., title: 'Marker 2'},
{id: 3, lat: ..., lng: ..., title: 'Marker 3'}
]
function initMap() {
var map = ...;
var icon = ...;
var markers = [];
for(var i=0; i<places.length; i++) {
markers.push(new google.maps.Marker({
position: {lat: places[i].lat, lng: places[i].lng},
map: map,
icon: icon,
label: {..., text: ''+places[i].id},
title: places[i].title
}));
}
}
И вы должны использовать const для массивов (маркеров и мест) и впустить цикл for.
Я знал, что переопределяю переменную-маркер в своем цикле, но поскольку я ничего не делаю с этой переменной, кроме ее создания, я не стал пока помещать их в массив. Но теперь я знаю, как это сделать, спасибо.
какая-либо ошибка в консоли, уверены ли вы, что ваши place [i] .lat возвращают вместо этого число, а не строку?