为了账号安全,请及时绑定邮箱和手机立即绑定

动态创建对象字面量

动态创建对象字面量

偶然的你 2023-04-20 09:54:47
我正在尝试动态添加一个名为“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);    }}
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

orders.features = [{}];

features是一个数组。索引处的值(最初)0是一个空对象。


这是它唯一的价值。


因此,当i您1尝试设置属性undefined而不是对象时。


不要用空对象初始化数组。在需要时向数组添加一个对象:


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

    orders.features[i] = {};

…这意味着您在开始之前不需要数组中的空对象:


orders.features = [];

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

…但是真的没有必要重复访问数组的索引和修改对象。


只需创建包含所有数据的对象,然后将push其放到数组的末尾:


    orders.features = [];

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

        const object = {

            geometry: {

                x: "value_here",

                y: "other_value_here"

            }

        };

        orders.features.push(object);

    }


查看完整回答
反对 回复 2023-04-20
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信