我有一个对象数组:

 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/

10-11 13:00