我发现自己遇到了Java语言的特殊问题。我试图维护一种状态对象/ 字典(dict1)和最终对象/ 字典(dict2),我必须发布该状态。
点击某些按钮时,我将对象dict1分配给我的对象dict2 。我想做的是删除dict2中的密钥,但是行为很特殊,因为它还会从dict1 中 删除密钥。下面是我的代码:
dict1 = {
123:{
456:2
}
}
dict2 = {}
dict2[123] = dict1[123]
delete dict2[123][456]
console.log(dict1)
// It logs {123 : {} } whereas the dict1 shouldn't change
似乎对象正在以某种方式进行浅层复制。
答案 0 :(得分:2)
使用传播运算符(...
)创建对象的“副本”,这样就无需修改原始对象。
最初,您是将dict1[123]
中存储的引用复制到dict2[123]
中。这意味着两个dict属性都指向同一对象,并且可以从另一个dict看到对一个dict所做的修改。通过使用传播运算符,您将一个对象的所有内容添加到一个新的。这意味着dict1[123]
和dict2[123]
将存储2个包含相同数据的不同引用,您可以分别对其进行修改。
详细了解传播操作符here。
dict1 = {
123:{
456:2
}
}
dict2 = {}
dict2[123] = {...dict1[123]}
delete dict2[123][456]
console.log(dict1)
console.log(dict2)