动态创建对象字面量

我正在尝试动态添加一个名为“geometry”的对象及其属性“x”和“y”,在一个名为“features”的对象数组中。假设 for循环运行 N次而不是 2 次。

我想要实现的最终结构是这样的:


{

  "type": "features",

  "features": [{

      "geometry": {

          "x": -8.895197546558027,

          "y": 38.52577703769191

      }

  },

  {

      "geometry": {

          "x": -8.877264297084386,

          "y": 38.53907316236277

      }

  }]

}

使用我的代码,我得到了错误 - “无法设置未定义的属性‘几何’”。


function makeOrders(){

    try {

        var orders = { "type": "features" };

        orders.features = [{}];

        for(var i=0; i<2; i++){

            orders.features[i].geometry = {};

            orders.features[i].geometry.x = "value_here";

            orders.features[i].geometry.y = "other_value_here";

        }

        console.log(orders);

    } catch (e) {

        console.error(e);

    }

}


偶然的你
浏览 109回答 1
1回答

慕妹3146593

orders.features = [{}];features是一个数组。索引处的值(最初)0是一个空对象。这是它唯一的价值。因此,当i您1尝试设置属性undefined而不是对象时。不要用空对象初始化数组。在需要时向数组添加一个对象:for(var i=0; i<2; i++){&nbsp; &nbsp; orders.features[i] = {};…这意味着您在开始之前不需要数组中的空对象:orders.features = [];for(var i=0; i<2; i++){…但是真的没有必要重复访问数组的索引和修改对象。只需创建包含所有数据的对象,然后将push其放到数组的末尾:&nbsp; &nbsp; orders.features = [];&nbsp; &nbsp; for(var i=0; i<2; i++){&nbsp; &nbsp; &nbsp; &nbsp; const object = {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; geometry: {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x: "value_here",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y: "other_value_here"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; orders.features.push(object);&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript