javascript - 复制而不保留引用

标签 javascript angular object

所以我有一个名为 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/

相关文章:

angular - 在 Angular 5 http 请求中使用 observable 有什么好处?

javascript - 在 JavaScript 转换期间获取当前 CSS 属性值

javascript - Node Js基于javascript,用户是否有可能破解代码

javascript - 动态创建的输入类型=文件在 PHP 中不起作用?

angular - 我什么时候可以检查是否已给出 '@Input()'?

javascript - 如何使我的 Firestore 搜索可重复?

javascript - 字符串拆分为 javascript 对象

javascript - 在javascript中,构造对象时,无法使用其他对象的方法

javascript - 循环遍历对象键并向值添加标签

javascript - 为什么这个 javascript 会抛出这个特定的错误?