我有一个对象数组:
let users = [{name: 'john', address: '10 king street'}, ....];
我通过以下方式复制此数组:
let usersCopy = users.slice(0);
那我做的话
usersCopy[0].name = jeff;
它还在原始用户数组上对此进行了更新:
console.log(usersCopy[0].name) //jeff
console.log(users[0].name) //jeff
我希望看到:
console.log(usersCopy[0].name) //jeff
console.log(users[0].name) //john
最佳答案
这是因为[].slice()
会进行浅表复制,这意味着您将获得一个新数组,但不会克隆其下的对象。因此,users[0] === usersCopy[0]
,因为它们是对相同对象的相同引用。
您将需要完全替换usersCopy[0]
。例如:
usersCopy[0] = {...usersCopy[0], name: 'jeff'}
这将创建一个新对象,其中所有内容均从
usersCopy[0]
浅拷贝到其中。关于javascript - 更改复制数组,更新原始数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48529399/