【问题标题】:JavaScript How to delete key from copied object? [duplicate]JavaScript 如何从复制的对象中删除键? [复制]
【发布时间】:2016-02-28 09:15:30
【问题描述】:

我有查询对象

var q = {
    age: 10, 
    'profile.contry': 'india'
};

现在我复制 q 变量并从重复变量中删除键。

var duplicateQ = q;
delete duplicateQ['profile.contry']; // I have removed 'profile.country' from duplicateQ.

console.log(q); //Object { age: 10 }
console.log(duplicateQ); //Object { age: 10 }

为什么这两个变量都会受到影响?如何仅从其中一个中删除该属性?

【问题讨论】:

  • duplicateQ 是对原始q 的引用。您需要克隆该对象。有关详细信息,请参阅我标记为重复的答案。
  • @RoryMcCrossan:从技术上讲,OP 正在询问如何从克隆对象中删除属性。虽然“克隆”是个问题,但肯定有更好的复制品……(我还没找到)
  • 没错,尽管他的删除方法是正确的。欺骗问题解决了他遇到的问题。
  • 我建议:stackoverflow.com/questions/728360/…(如果您同意,我可以申请)
  • 我同意 - 那个更通用。

标签: javascript jquery


【解决方案1】:

这是因为qduplicateQ 指的是同一个对象。因此,当您删除一个对象的属性时,它会同时影响两者(因为它们都指向同一个对象)。

您需要复制/克隆对象。

在 ES6 中,你可以使用.assign() method

var q = {age:10, 'profile.contry': 'india'};
var duplicateQ = Object.assign({}, q);
delete duplicateQ['profile.contry'];

输出:

console.log(q);
// {age: 10, profile.contry: "india"}

console.log(duplicateQ);
// Object {age: 10}

【讨论】:

    【解决方案2】:

    您不是在复制 q,而是在复制对不同变量的引用。

    qduplicateQ 都指向相同的 对象,即您计算机内存中的相同位置。

    为了完成这项工作,您将不得不clone the object,然后您可以删除(/修改)单独变量上的各个属性。

    一个简单粗暴的例子:

    var a = { a: 1, b: 2 },
        b = JSON.parse(JSON.stringify(a));
    
    delete b.a;
    
    document.body.textContent = JSON.stringify(a) + ' ' + JSON.stringify(b);

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2018-05-27
      • 2012-06-17
      • 2018-04-16
      • 1970-01-01
      • 2011-03-24
      • 2023-03-16
      相关资源
      最近更新 更多