Добрый день!
Есть коллекция меток. При изменении границ видимой области проверяю на выход меток за границы области и если они выходят, то удаляю метки с карты. Код следующий:
var b = map.getBounds();
var iterator = gCollection.getIterator(), object, position;
while ((object = iterator.getNext()) != iterator.STOP_ITERATION) {
position = object.geometry.getCoordinates();
if ((position[0] > b[1][0]) || (position[0] < b[0][0]) || (position[1] < b[0][1]) || (position[1] > b[1][1]) ) {
gCollection.remove(object);
}
}
В версии 2.1 итератор работает не верно, а именно если произошло удаление из коллекции, то при подходе к концу итератор не выдает конец коллекции iterator.STOP_ITERATION, а выдает пустой объект. Таким образом, получаем и не конец коллекции и не объект из коллекции.
В версии 2.0 когда не было iterator.STOP_ITERATION проверка была на возвращаемый обхект итератором и если он был пустой, то считался конец коллекции.
Получается, что итератор по коллекции работает без учета изменений в коллекции, т.е. не переходит к следующему элементу (как того требует определение итератора), а выбирает объект из коллекции по следующему индексу, а коллекция уже сместилась на один удаленный элемент ближе к началу.
Есть ли решение?