所有对象都在数组中受到影响

时间:2018-04-15 22:33:22

标签: javascript arrays object

样品:

test = {one: 1, two: 'two', three: 3};

arr = [];
arr.unshift(test);
arr.unshift(test);
arr.unshift(test);

arr[0].two = 2;

结果:

enter image description here

我想要什么?我想要更改first array中的值,其他人在访问two时仍然使用值arr[index].two进行更改。我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:4)

这是因为您实际上是在向同一个对象添加3个引用。因此,任何修改都会影响数组中的3个条目。

您想要为每个条目创建对象的不同副本,因此它们在逻辑上都是不同的,并且可以单独修改。

您可以使用Object.assign({}, yourModelObject)来实现此目的。

例如,请参阅以下代码段:



let test = {one: 1, two: 'two', three: 3};
let arr = [] 

arr.unshift(Object.assign({}, test));
arr.unshift(Object.assign({}, test));
arr.unshift(Object.assign({}, test));

arr[0].two = 2
console.log(arr)




答案 1 :(得分:0)

您正在推卸/取消相同引用。
使用Object.create(...)创建新引用,然后您就可以修改数组中的任何单个实例

  

Object.create()方法创建新对象,使用现有对象提供新创建的对象__proto__



let test = {
  one: 1,
  two: 'two',
  three: 3
};

let arr = [];
arr.push(Object.create(test));
arr.push(Object.create(test));
arr.push(Object.create(test));

arr[0].two = 2;

console.log(arr[0].two)
console.log(arr[1].two)
console.log(arr[2].two)