nodejs / JS:对象未在数组中更新

时间:2020-06-01 19:50:14

标签: javascript arrays node.js json for-loop

首先,我对Javascript和Node.js完全陌生。

我试图编写一个简单的程序,该程序创建一个平面数组,除了索引以外,所有其他平面均具有相同的值,索引应采用for循环中从0-2的每个索引的值。

这是我的代码

var plane = {
    index: -1,
    name: "A380",
    seats: {
        first: 40,
        buisness: 90,
        economy: 300
    },
    wheels: 8,
}

var planeArray = []

for (var i = 0; i < 3; i++) {
    plane.index = i
    planeArray.push(plane)
  }

  console.log(planeArray)

但是当我打印输出时,所有平面的索引都是2。这是我的输出。

[
  {
    index: 2,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  },
  {
    index: 2,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  },
  {
    index: 2,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  }
]

这是我的预期输出。

[
  {
    index: 0,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  },
  {
    index: 1,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  },
  {
    index: 2,
    name: 'A380',
    seats: { first: 40, buisness: 90, economy: 300 },
    wheels: 8
  }
]

我不明白为什么。 有人可以帮我吗。此外,将非常感谢您对有助于学习node.js的任何其他说明/资源

2 个答案:

答案 0 :(得分:-1)

您始终使用plane.index = i更改同一对象。如果要在数组中包含三个不同的条目,则需要三个不同的对象。

答案 1 :(得分:-1)

这里的问题是要添加到数组中的对象作为引用而不是对象的值 您可以尝试以下两种解决方案之一。 这样,您可以传递对象值而不是其引用。

for (var i = 0; i < 3; i++) {
    plane.index = i
    planeArray.push({...plane})
  }
for (var i = 0; i < 3; i++) {
    plane.index = i
    planeArray.push(JSON.parse(JSON.stringify(plane)))
  }