JavaScript如何从复制的对象中删除密钥?

我有查询对象

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 } 

为什么两个变量都受到影响? 我怎样才能从其中一个中删除该属性?

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

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

为了使这项工作,您将不得不克隆该对象 ,然后您可以删除(/修改)单独变量上的各个属性。

一个快速而肮脏的例子:

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

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

您需要复制 / 克隆该对象。

在ES6中,您可以使用.assign()方法 :

 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}