样品:
test = {one: 1, two: 'two', three: 3};
arr = [];
arr.unshift(test);
arr.unshift(test);
arr.unshift(test);
arr[0].two = 2;
结果:
我想要什么?我想要更改first array
中的值,其他人在访问two
时仍然使用值arr[index].two
进行更改。我该怎么做才能解决这个问题?
答案 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)