首页 > 解决方案 > 在将对象推送到数组时,对象中一个特定变量的所有值都变得相同

问题描述

我创建将同一个对象推送到一个数组 10 次,但每次推送它都会用 +1 更改对象内部的一个变量。但是当循环结束时,所有对象中的所有变量都以 10 结束(相同的值)。为什么是这样?

例子:

var obj = {}
var array = [];

for(var i = 0; i < 10; i++){
    obj.number = i;
    array.push(obj);
}

当我然后 console.log(array)

它返回数组,但所有 obj 的编号相同。为什么是这样?

标签: javascript

解决方案


您在数组中推送一个对象,这意味着您正在推送对同一对象的引用;如果你在某处改变你的对象,它会在任何地方改变。

您可以:

在每次迭代时创建一个新对象:

var array = [];

for(var i = 0; i < 10; i++){
    var obj = {}
    obj.number = i;
    array.push(obj);
}

console.log(array);

或者,克隆对象以确保更改不会应用于引用

var obj = {}
var array = [];

for(var i = 0; i < 10; i++){
    let newObject = JSON.parse(JSON.stringify(obj))
    newObject.number = i;
    array.push(newObject);
}

console.log(array);


推荐阅读