Клуб API Карт

кластер не работает если индексы массива точек с разрывами

Пост в архиве.

в цикле добавляем точки в массив таким образом (что бы потом их можно было в нём идентифицировать)

placemarks[points.ee[i].o_id] = placemark;

спотыкается вот на этом:

cluster.add(placemarks);


но если добавлять точки в массив так:

placemarks[i] = placemark;

то работает.


что бы это могло быть?

7 комментариев

Кластер не работает, если массив с разрывами. Это не баг.

массивов с разрывали не сущесвует.

Если добавить элемент в 1000 позицию - получите 999 пустых ячеек и одну заполненую.

Если добавить что угодно по "не числу" - вообще крышу снесет, length может стать какой угодно.

В вашем случае вообще лучше использовать хэш( {} )

После чего заливаем свои данные в обычный массив и отправляем в кластер.

почему-то втакая конструкция рисует что её в голову взбредёт, но ошибок не показывает

if (!(points.ee[i].o_id in hashpoints)){

      hashpoints[points.ee[i].o_id] = placemark;

}

for(var k in hashpoints){

      placemarks[i] = hashpoints[k];

}

что такое i?

for(var k in hashpoints) placemarks.push(hashpoints[k]);

Если добавить элемент в 1000 позицию - получите 999 пустых ячеек и одну заполненую.

пруф??

может, ты имеешь в виду объявление массива? типа new Array(1000) ?

у меня такая информация:

 

Массив хранит данные по численным ключам, но внутри он использует точно такой же хэш (ту же структуру данных), как и обычный объект, поэтому можно сделать так:

var a = []
a[1] = 1
a[999999] = 2

и массив a будет занимать память, нужную для хранения этих двух соответствий, а не займет длинный непрерывный кусок памяти, как это произошло бы в языке С.

А теперь попробуйте получить длину массива a.length и вы, наверно, удивитесь, но она будет 1000000. В итоге если вы будете в цикле перебирать значения массива с первого до его длины, получите мноооого пустых значений.

 

В итоге если вы будете в цикле перебирать значения массива с первого до его длины, получите мноооого пустых значений.

Это же не единственный способ перебора

можно перебирать с помощью метода forEach, он не будет обрабатывать отсутствующие ключи