javascript - 在 for 循环中设置对象值,然后推送到数组会导致所有最终数组项具有相同的值

标签 javascript arrays

假设我有一个简单的函数,它基本上将一个对象作为参数,添加一个值,然后将其推送到一个数组。

var objectFruits = {
  name: 'apple'
}

var fruits = []

function pushToArray(parameters) {
  var newObject;
  newObject = Object.assign({}, parameters)

  for (var i = 0; i < 3; i++) {
    newObject.value = i
    fruits.push(newObject)
    console.log(newObject)
  }
}

pushToArray(objectFruits)

console.log(fruits)

这给了我一个结果:

0: {name: "apple", value: 2}
1: {name: "apple", value: 2}
2: {name: "apple", value: 2}

它应该在哪里:

0: {name: "apple", value: 0}
1: {name: "apple", value: 1}
2: {name: "apple", value: 2}

为什么最终数组fruits显示每一项的value2

最佳答案

您在循环的每次迭代中更新同一对象的值,您需要创建一个新对象。

只要输入这一行

newObject = Object.assign({}, parameters)

for循环内

演示

var objectFruits = {
  name: 'apple'
};
var fruits = [];

function pushToArray(parameters) {
  for (var i = 0; i < 3; i++) {
    var newObject = Object.assign({}, parameters)
    newObject.value = i
    fruits.push(newObject);
  }
}

pushToArray(objectFruits);

console.log(fruits);

关于javascript - 在 for 循环中设置对象值,然后推送到数组会导致所有最终数组项具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46823535/

相关文章:

javascript - 为什么我得到 "undefined is not an object (evaluating PropTypes.shape)"?

Javascript函数不从另一个函数内部返回值

C++ cin.ignore 导致段错误?

javascript - 将数组内部的数组解析为 PHP

javascript - 将项目添加到道场树的顶部

javascript - 提交时禁用 JSF 表单字段验证

javascript - 复制函数实现

Java - 避免使用父类(super class)对象数组进行强制转换

arrays - Excel - 查找列中不是错误或空白的最后一个值

javascript - 如何知道我的 JS 的哪一部分导致了延迟?