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
,而是复制对不同变量的引用。
q
和duplicateQ
指向同一个对象,即计算机内存中的相同位置。
为了使这项工作,您将不得不克隆该对象 ,然后您可以删除(/修改)单独变量上的各个属性。
一个快速而肮脏的例子:
var a = { a: 1, b: 2 }, b = JSON.parse(JSON.stringify(a)); delete ba; document.body.textContent = JSON.stringify(a) + ' ' + JSON.stringify(b);
这是因为q
和duplicateQ
指的是同一个对象。 因此,当您删除一个对象上的属性时,它会同时影响(因为它们都指向同一个对象)。
您需要复制 / 克隆该对象。
在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}