如何动态创建javascript对象?

时间:2016-03-29 17:24:54

标签: 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替换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>'
    }
];

所以我想知道是否有人可以向我解释我对动态创建对象的理解?

3 个答案:

答案 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;