问题原因是由于 JavaScript 中的对象实际上是引用类型。当你迭代一个对象并将其推入数组时,实际上推入的是对象的引用,而不是实际的对象。这意味着当你更改一个对象的属性时,所有引用该对象的地方都会受到影响。
为了解决这个问题,你可以创建实际的对象副本并将其推入数组中,而不是将引用推入。以 ES6 为例,可以使用扩展运算符来复制对象。以下是一个示例:
const originalArray = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 40 },
{ name: 'Charlie', age: 50 }
];
function cloneAndPush(array) {
const newArray = [];
array.forEach(item => {
newArray.push({ ...item });
});
newArray.push({ name: 'David', age: 60 });
return newArray;
}
const newArray = cloneAndPush(originalArray);
console.log(newArray); // [{name: "Alice", age: 30}, {name: "Bob", age: 40}, {name: "Charlie", age: 50}, {name: "David", age: 60}]
在这个例子中,cloneAndPush()
函数复制原始数组中的每个对象,将其推入新的数组中并返回新的数组。现在,新数组中的对象以及原始数组中的对象没有任何关系,因此修改一个对象的属性不会影响另一个对象的属性。