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

时间:2015-11-25 14:20:26

标签: javascript jquery

我有查询对象

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 }

为什么两个变量都受到影响?如何从其中一个属性中删除属性?

2 个答案:

答案 0 :(得分:6)

您没有复制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);

答案 1 :(得分:5)

这是因为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}