Я почти уверен, что причина, по которой вы получаете неопределенное значение во время итерации, когда в вашем начальном массиве нет неопределенных значений, заключается в том, что вы удаляете элементы из массива во время итерации.Я предполагаю, что это сбивает с толку итератор jQuery $.each()
.
Если вы посмотрите на свой вывод, то произойдет следующее:
1st Iteration
index === 0, array is["markerZip02111", "markerZip02139", "markerZip01002",
"markerZip94602", "markerZip02460"]
item 0 "markerZip02111" gets removed, shifting all the later elements up
2nd Iteration
index === 1, but now array is ["markerZip02139", "markerZip01002",
"markerZip94602", "markerZip02460"]
item 1 "markerZip01002" gets removed, shifting all the later elements up
3rd Iteration
index ===2, but now array is ["markerZip01002", "markerZip94602",
"markerZip02460"]
so the last item "markerZip02460" gets removed
4th Iteration
index === 3, but now array only has two elements so value
at that index is undefined.
Обратите внимание, что два элемента никогда не были оценены:итератор пропустил их, потому что вы изменили их индексы, удалив элементы.
Если вы должны удалять элементы по ходу, это легко сделать с помощью обычного цикла for, который повторяет в обратном направлении, так что удаление элементов не приводит к повреждению счетчика цикла,(Или вы можете использовать обычный цикл for для продвижения вперед, если вы настраиваете переменную счетчика каждый раз, когда удаляете элемент.)
Кроме того, когда вы выполняете сращивание, вам нужно передать индекс элемента какпервый параметр, а не значение элемента.Так что markersArray.splice(index, 1);
не markersArray.splice(value, 1);
.
Итак, что-то вроде:
function removeAllMarkers(exceptId) {
var value;
for (var i = markersArray.length - 1; i >= 0; i--) {
value = markersArray[i];
if (value != exceptId) {
markersArray.splice(i, 1);
eval(value+".setMap(null);");
console.log(value + " removed");
}
}
}