我正在尝试创建一个位置对象,用于在地图上放置点。
我的代码是:
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替换i,它可以在地图上显示一个点。
我需要输出的是:
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 :(得分: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 :(得分:1)
正如错误所述,您正在尝试为未定义的对象创建新密钥。在为对象赋值之前,需要创建它。
当您执行var Locs = [{}];
时,它会创建一个包含一个空对象的数组,这就是为什么当您将i替换为0时它的工作原理。您可以在将纬度指定为0之前添加Locs[i] = {};
创建一个空对象,或直接创建:Locs.push({lat: locations[i][1], long: locations[i][2], ...etc});
答案 2 :(得分:-1)
为每个循环启动数组。此代码将帮助您:
var Locs = [];
Locs[1] = [];
Locs[1]['lat'] = 123;
Locs[1]['long'] = 123;
Locs[2] = [];
Locs[2]['lat'] = 123;
Locs[2]['long'] = 123;