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】:
这是因为q
和duplicateQ
指的是同一个对象。因此,当您删除一个对象的属性时,它会同时影响两者(因为它们都指向同一个对象)。
您需要复制/克隆对象。
在 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
,而是在复制对不同变量的引用。
q
和duplicateQ
都指向相同的 对象,即您计算机内存中的相同位置。
为了完成这项工作,您将不得不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 对象时如何排除键列表? [复制]
如何使用 jQuery/Javascript 从内存中删除对象? [复制]