В приложении Google Maps я могу разместить маркеры на карте и сохранить ссылку на каждый размещенный маркер вместе с дополнительной информацией в массиве с именем markers
.Удалить произвольный элемент из массива JavaScript
Добавление маркеров легко, я просто push()
вновь созданный объект на массив (markers.push(marker)
);
Однако, когда дело доходит до удаления произвольного маркера из массива, учитывая индекс слота, он не ведет себя так, как ожидалось. Моя функция:
function deleteMarker(markerIndex) {
if (markerIndex!='' && markerIndex>=0 && markerIndex<markers.length) {
if (confirm('Do you really want to remove this marker from the map?')) {
alert('deleting marker '+markerIndex); //debugging purposes
markers.splice (markerIndex, 1);
}
}
}
У меня нет опыта работы с функцией сплайсинга(), но, глядя на its description @ w3schools это, кажется, довольно прямо вперед. Однако, я получаю следующее поведение:
markers.splice()
ничего не делает. Так что я делаю неправильно?
А также, когда markerIndex
- 0, не отображается окно подтверждения. Сначала я предположил, что длительное if-условие оценивается как false, и поэтому весь блок кода был пропущен, однако, используя Firebug, чтобы выполнить вызовы, которые я обнаружил, что условие выполняется (конечно) для индекса 0, когда массив непусто , следующий шаг показывает, что if (confirm(...))
и alert('deleting...)
являются пропущен и markers.splice()
называется (но ничего не происходит). Такое поведение так странно, что я решил открыть этот вопрос.
Может кто-нибудь объяснить, что происходит?
Я думал, что удаление маркеров будет самым простым набором функций, которые можно было бы сделать. Я могу добавить их, отредактировать их содержимое, даже очистить все маркеры (pop()
-отметить маркеры от массива markers
до пустого), и все работает красиво.
Большое спасибо за помощь. Это должно позаботиться об 0-индексной проблеме :) Я продолжаю пробовать функцию splice(). Кажется, нужно работать, но результаты странные ... Я думаю, что я на правильном пути и сам это выясню. Был просто озадачен тем, что показал Firebug ... Нельзя доверять ему слишком много :) –
В ответ на: «Ваша другая проблема с splice() не работает, это странно (она должна работать)». Да ты прав. Он делает: $ –