2016-03-29 2 views
0

Я пытаюсь создать объект местоположений для размещения точек на карте.Как создать объект javascript динамически?

Мой код:

var Locs = [{}]; 
    var title = '', content = ''; 

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


     content = '<div id="bodyContent">' + 
       '<p><b>' + locations[i][0] + '</b><br />' + 
       locations[i][4] + 
       '</div>'; 

     Locs[i]['lat'] = locations[i][1]; 
     Locs[i]['lon'] = locations[i][2]; 
     Locs[i]['zoom'] = zoom; 
     Locs[i]['title'] = locations[i][0]; 
     Locs[i]['html'] = content; 

    } 

Я получаю сообщение об ошибке: TypeError: Locs[i] is undefined Если я заменю я с 0 он работает для отображения одной точки на карте.

Что мне нужно для вывода является:

var Locs = [ 
    { 
     lat: 45.9, 
     lon: 10.9, 
     zoom: 3, 
     title: 'Title A1', 
     html: '<h3>Content A1</h3>' 
    }, 
    { 
     lat: 44.8, 
     lon: 1.7, 
     zoom: 3, 
     title: 'Title B1' 
     html: '<h3>Content B1</h3>' 
    }, 
    { 
     lat: 51.5, 
     lon: -1.1, 
     zoom: 3, 
     title: 'Title C1', 
     html: '<h3>Content C1</h3>' 
    } 
]; 

Так мне интересно, если кто-то может объяснить мне, что я не понимаю, о создании объекта динамически?

+0

«Локи» уже определены как метод или что-то в этом роде, что произойдет, если вы измените имя на «location_array» – Petro

+1

Я не понимаю, в чем проблема. 'Locs = []', а затем 'Locs.push ({lat: 1, lon: 2, etc})' –

+0

Вы в настоящее время инициализируете Locs как массив, содержащий один объект. Вы должны инициализировать его как пустой массив: «var Locs = [];», а затем инициализировать каждый объект на каждой итерации: «Locs [i] = {};' – Arnauld

ответ

3

Вы должны создать новый object первый перед обращением, что

Locs[i] = {}; 
Locs[i]['lat'] = locations[i][1]; 
Locs[i]['lon'] = locations[i][2]; 
Locs[i]['zoom'] = zoom; 
Locs[i]['title'] = locations[i][0]; 
Locs[i]['html'] = content; 

Если вы не создаете его, то ваш код будет оцениваться как,

Locs[i]['lat'] 
undefined['lat'] //will throw error here. 
-1

Инициировать массивы для каждого цикла. Этот код поможет вам:

var Locs = []; 
Locs[1] = []; 
Locs[1]['lat'] = 123; 
Locs[1]['long'] = 123; 
Locs[2] = []; 
Locs[2]['lat'] = 123; 
Locs[2]['long'] = 123; 
+0

По крайней мере, это должно быть 'Locs [1] = {}' – Andy

+0

Я думаю, [] работает тоже? – DVN

+0

Не используйте массивы в качестве ассоциативных массивов. Для этого нужны объекты. – Andy

1

Как заявляет ошибка, вы пытаетесь создать новые ключи для объекта, который не определен. Прежде чем назначать значения объекту, вам необходимо его создать.

Когда вы var Locs = [{}];, он создает массив с одним пустым объектом, поэтому он работает при замене I на 0. Вы можете добавить Locs[i] = {}; перед назначением широты, чтобы создать пустой объект, или непосредственно что-то вроде: Locs.push({lat: locations[i][1], long: locations[i][2], ...etc});