我有查询对象
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 }
为什么两个变量都受到影响?如何从其中一个属性中删除属性?
答案 0 :(得分:6)
您没有复制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);
答案 1 :(得分:5)
这是因为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}