关于jquery:JavaScript如何从复制的对象中删除密钥?

JavaScript How to delete key from copied object?

本问题已经有最佳答案,请猛点这里访问。

我有查询对象

1
2
3
4
var q = {
    age: 10,
    'profile.contry': 'india'
};

现在我复制了q变量,并从一个重复的变量中删除key。

1
2
3
4
5
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都指向同一对象,在计算机内存中的同一位置。

为了使这项工作正常进行,您必须克隆该对象,然后您可以在单独的变量上删除(/modify)单个属性。

一个快速而肮脏的例子:

1
2
3
4
5
6
var a = { a: 1, b: 2 },
    b = JSON.parse(JSON.stringify(a));

delete b.a;

document.body.textContent = JSON.stringify(a) + ' ' + JSON.stringify(b);


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

您需要复制/克隆对象。

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

1
2
3
var q = {age:10, 'profile.contry': 'india'};
var duplicateQ = Object.assign({}, q);
delete duplicateQ['profile.contry'];

输出:

1
2
3
4
5
console.log(q);
// {age: 10, profile.contry:"india"}

console.log(duplicateQ);
// Object {age: 10}