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

标签 javascript json dictionary object

我发现自己遇到了 Javascript 的特殊问题。我正在尝试维护一种形式的状态对象/字典(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

看起来对象正在以某种方式进行浅复制。

最佳答案

使用扩展运算符 (...) 创建对象的“副本”,这样您就不会修改原始对象。

最初,您将 dict1[123] 中存储的引用复制到 dict2[123]。这意味着两个字典属性都指向同一个对象,并且从一个字典所做的修改可以从另一个字典中看到。通过使用扩展运算符,您可以将对象的所有内容添加到新对象中。这意味着 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)

关于javascript - 删除一个对象的键也会删除另一个对象中的键 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62824165/

相关文章:

javascript - 纯组件和样式/引用标签

javascript - 按键合并多个数组

dictionary - 常规嵌套映射更新值而不检查值的类型

.net - .NET 4 中的 IDictionary<TKey, TValue> 不是协变的

javascript - 如何从键/值 JSON 对象获取值

Python - 增加字典值的函数

javascript - 调整大小时 Canvas 引用丢失

javascript - 避免重复 数学随机

Javascript - 在类的函数成员中正确使用 'this'

javascript - jQuery - 从 JSON Stringify 获取值