Javascript: генерация ключей объекта внутри цикла и вставка массива объектов в каждый? - PullRequest
1 голос
/ 15 сентября 2011

Я работаю над картой Google здесь: http://crocdoc.ifas.ufl.edu/projects/chameleonmapdev/

У меня есть данные для маркеров, настроенных в этом формате:

var nights = ['July1211', 'July1411'];
var waypoint_data = {
    July1211: [
        //Lat, long, j/a (juvenile/adult)
        [25.429363, -80.508326, j],
        [25.429332, -80.508216, j]
    ],

    July1411: [
        [25.42936, -80.51023, j], 
        [25.42936, -80.51036, j]

    ]
};

И функция, которая строит точкивыглядит следующим образом:

function buildPoints() {
    //var marker_container = new Object;

        for ( i = 0; i < nights.length ; i++ ) {

            //Loop for each data point that night
            for ( h = 0; h < waypoint_data[nights[i]].length; h++) {
                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(waypoint_data[nights[i]][h][0], waypoint_data[nights[i]][h][1]),
                    icon: waypoint_data[nights[i]][h][2],
                    shape: pointshape,
                    map: map
                });

                //Push waypoints into date-specific object key
                //marker_container[nights[i]].push(marker);

            }

        }

    }   

Я хотел бы вставить маркеры для каждой даты (night [i]) в другую клавишу объекта, чтобы я мог скрыть / показать маркеры определенной ночи.Я попытался сделать это с двумя закомментированными строками marker_container, но они просто разрывают мой цикл, и в Firebug я получаю сообщение о том, что marker_container [nights [i]] не определен.nights [i] - это строка, поэтому я подумал, что этот синтаксис сработает.Любые советы приветствуются, и я очень открыт для предложений по другим, лучшим способам кодирования этого.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Вы не можете использовать push для объекта, только для массива.Я думаю, это то, что вы хотите сделать:

function buildPoints() {
    var marker_container = new Object();

        for ( i = 0; i < nights.length ; i++ ) {
            marker_container[nights[i]] = new Array();

            //Loop for each data point that night
            for ( h = 0; h < waypoint_data[nights[i]].length; h++) {
                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(waypoint_data[nights[i]][h][0], waypoint_data[nights[i]][h][1]),
                    icon: waypoint_data[nights[i]][h][2],
                    shape: pointshape,
                    map: map
                });

                //Push waypoints into date-specific object key
                marker_container[nights[i]].push(marker);

            }

        }

    }   

простое доказательство концепции jsfiddle

0 голосов
/ 15 сентября 2011

Если вы знаете, сколько у вас будет маркеров (скажем, 10), настройте контейнер маркеров, сделав каждый элемент объекта самим объектом длиной 2:

    marker_container= new Object(10);
       for (i=0; i<marker_container.length; i++){
          marker_container[i]=new Object(2);
       }

После создания маркеров добавьте их в маркер_контейнера:

  marker_container[i][0] = nights[i];
  marker_container[i][1] = marker;

Если вы хотите отобразить и скрыть маркер, сделайте следующее:

  //display
  marker_container['nightX'].setMap(map);

  //hide
  marker_container['nightX'].setMap(null);
...