我正在尝试动态添加一个名为“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);
}
添加回答
举报
0/150
提交
取消