删除对象的键也会删除另一个对象中的键-Javascript

时间:2020-07-09 21:41:50

标签: javascript json dictionary object

我发现自己遇到了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

似乎对象正在以某种方式进行浅层复制。

1 个答案:

答案 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)