【问题标题】:Delete a object's key also deletes key in the other object - Javascript删除一个对象的键也会删除另一个对象中的键 - Javascript
【发布时间】:2020-10-30 14:20:49
【问题描述】:

我发现自己遇到了 Javascript 的一个特殊问题。我正在尝试维护我必须发布的状态对象/ dictionary (dict1) 和最终对象/ dictionary(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] 都指向完全相同的对象{456: 2}(在内存中的同一位置)。

标签: javascript json dictionary object


【解决方案1】:

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

最初,您将存储在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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2021-03-15
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多