Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по массивам (https://javascript.ru/forum/misc/18024-vopros-po-massivam.html)

antserg 13.06.2011 23:16

Вопрос по массивам
 
Разбираюсь с api Яндекс.Карты. Есть метод Polyline, который в качестве параметров принимает массив координат и на его основе отрисовывает ломанную линию на карте. Но это не суть важно. Вот код, который работает правильно.
var pl = new YMaps.Polyline([
    new YMaps.GeoPoint(34.097111,44.952333),
    new YMaps.GeoPoint(34.58724,45.059185),
    new YMaps.GeoPoint(35.0855,45.029082),
    new YMaps.GeoPoint(35.383875,45.030324),
    new YMaps.GeoPoint(36.468772,45.347998),
  ])
map.addOverlay(pl)

Вопрос: как переписать этот код с использованием цикла?
Напримет, такой код не работает:
var pl=new YMaps.Polyline()
for (var i=0; i<a.length; i++)
  pl[i]=new YMaps.GeoPoint(a[i][0],a[i][1])
map.addOverlay(pl)

melky 13.06.2011 23:20

var Data = [ 

     [34.097111,44.952333],
     [34.58724,45.059185],
     [35.0855,45.029082],
     [35.383875,45.030324],
     [36.468772,45.347998]

];

var arr = [],c;

for(var i=0;i<Data.length;i++){ // от 0 до 4
      
      c = Data[i];  //  [34.097111,44.952333] при i=0

      arr.push( new  YMaps.GeoPoint( c[0],c[1] ) );

}

//arr - массив YMaps.GeoPoint

var pl = new YMaps.Polyline(arr);
map.addOverlay(pl)


а это если кода поменьше хочется. только неуверен, что будет работать :)



var D = [ 

     [34.097111,44.952333],
     [34.58724,45.059185],
     [35.0855,45.029082],
     [35.383875,45.030324],
     [36.468772,45.347998]

];

var c;

for(var i=0;i<D.length;i++) D[i] = new  YMaps.GeoPoint( (c=D[i])[0],c[1]  );


map.addOverlay(  new YMaps.Polyline( D )  )

monolithed 13.06.2011 23:31

как-то так:
var coords = [
        [34.097111,44.952333],
        [34.58724,45.059185],
        [35.0855,45.029082],
        [35.383875,45.030324],
        [36.468772,45.347998]],
    i = coords.length,
    array = [];

while(i--) {
    array.unshift(new YMaps.GeoPoint(coords[i][0], coords[i][1]));
}

map.addOverlay(new YMaps.Polyline(array));


PS: может где печатался, т.к. спать пошел

antserg 13.06.2011 23:50

melky,
monolithed,
Огромное спасибо за помощь, разобрался


Часовой пояс GMT +3, время: 13:12.