所以我有一个名为 elements
的变量保存着一堆数据。比方说,就是这样:
{
name: "Jeff",
age: "18",
carList: [
"car1": "...",
"car2": "..."
],
surname: "Matt"
}
我还有一个空数组,在开始时以这种方式声明:
public myArray: Model[] = [];
Model
只是一个包含 elements
定义的类.
我想要实现的是拥有 elements
的副本不保留对原始变量的任何引用。但我错过了一些东西。这是一个伪代码(几乎)可以做到这一点:
myfunction(){
//Do stuff that change `car1` from `...` to `hello`
myArray.push(Object.assign({}, this.elements));
}
最后,我有一个函数可以打印 myArray
中的所有内容。变量:
function print(){
this.myArray.forEach(el => {
console.log(el);
});
}
问题是数组的每个元素都有我完成的最新更新。
所以如果 myFunction
多次被调用做类似的事情:
- 将“Jeff”更改为“Jack”
- 将年龄“18”更改为“25”
- 将姓氏更改为“Seth”
我看到的是三个log
显示此数据:
{
name: "Jeff",
age: "25",
carList: [
"car1": "...",
"car2": "..."
],
surname: "Seth"
}
我的问题是:为什么还要使用 Object.asign
它仍然保留对其原始对象的引用吗?我应该保留每次修改的历史记录,而不是只保留我所做的三个编辑中的最后一个编辑。
谢谢。
最佳答案
尝试以下操作:
JSON.parse(JSON.stringify(element));
它不保留任何引用,正如您在下面的代码片段中所观察到的:
let element = { name: "Jeff", age: "18", carList: [ {"car1": "x"}, {"car2": "y"} ], surname: "Matt" };
let result = JSON.parse(JSON.stringify(element));
result.name = "x";
console.log(result);
console.log("****element*****");
console.log(element);
关于javascript - 复制而不保留引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740363/