我有查询对象
var q = {
age: 10,
'profile.contry': 'india'
};
Run Code Online (Sandbox Code Playgroud)
现在我复制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 }
Run Code Online (Sandbox Code Playgroud)
为什么两个变量都受到影响?我怎样才能从其中一个中删除该属性?
您没有复制q,而是复制对不同变量的引用.
双方q并duplicateQ指向同一个对象,在计算机的内存中的相同位置.
为了使这项工作,您将不得不克隆该对象,然后您可以删除(/修改)单独变量上的各个属性.
一个快速而肮脏的例子:
var a = { a: 1, b: 2 },
b = JSON.parse(JSON.stringify(a));
delete b.a;
document.body.textContent = JSON.stringify(a) + ' ' + JSON.stringify(b);Run Code Online (Sandbox Code Playgroud)
这是因为q和duplicateQ引用相同的对象。因此,当删除一个对象上的属性时,它会同时影响两个对象(因为它们都指向同一个对象)。
您需要复制 / 克隆对象。
在ES6中,您可以使用.assign()方法:
var q = {age:10, 'profile.contry': 'india'};
var duplicateQ = Object.assign({}, q);
delete duplicateQ['profile.contry'];
Run Code Online (Sandbox Code Playgroud)
输出:
console.log(q);
// {age: 10, profile.contry: "india"}
console.log(duplicateQ);
// Object {age: 10}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2619 次 |
| 最近记录: |