JavaScript 如何从复制的对象中删除键? [复制]

Posted

技术标签:

【中文标题】JavaScript 如何从复制的对象中删除键? [复制]【英文标题】:JavaScript How to delete key from copied object? [duplicate] 【发布时间】: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 正在询问如何从克隆对象中删除属性。虽然“克隆”是个问题,但肯定有更好的复制品……(我还没找到) 没错,尽管他的删除方法是正确的。欺骗问题解决了他遇到的问题。 我建议:***.com/questions/728360/…(如果您同意,我可以申请) 我同意 - 那个更通用。 【参考方案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);

【讨论】:

以上是关于JavaScript 如何从复制的对象中删除键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

克隆 JavaScript 对象时如何排除键列表? [复制]

如何从 mongodb 获取的对象中删除键? [复制]

如何从 mongodb 获取的对象中删除键? [复制]

如何使用 jQuery/Javascript 从内存中删除对象? [复制]

如何在现有 Javascript 对象中添加具有值的动态键? [复制]

如何使用 JQuery 或 Javascript 使用动态路径从 JSON 对象中删除