Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 复制角度2中的对象数组_Javascript_Arrays_Angular_Javascript Objects_Angular Arrays - Fatal编程技术网

Javascript 复制角度2中的对象数组

Javascript 复制角度2中的对象数组,javascript,arrays,angular,javascript-objects,angular-arrays,Javascript,Arrays,Angular,Javascript Objects,Angular Arrays,我有两个数组叫做“persons”和“persons2”, “persons2”数组将是“persons”数组的副本, 但问题是当我复制它时,我想更改第二个数组,第一个数组也在更改。这是我的代码: export class AppComponent { persons = [ { name:'David', lname:'Jeu' } ]; persons2=[...this.persons]; constructor(){

我有两个数组叫做“persons”和“persons2”, “persons2”数组将是“persons”数组的副本, 但问题是当我复制它时,我想更改第二个数组,第一个数组也在更改。这是我的代码:

  export class AppComponent {

  persons = [
    {
      name:'David',
      lname:'Jeu'
    }
  ];

  persons2=[...this.persons];

  constructor(){
      console.log(this.persons[0]);
      this.persons2[0].name='Drake';
      console.log(this.persons[0]);

      console.log(this.persons2[0]);
  }

}
但问题是当我复制它时,我想改变第二个 数组,第一个数组也在更改

这是因为两个数组中的对象共享相同的引用。要执行深度复制,请尝试以下操作:

let persons2 = person.map(x => Object.assign({}, x));


在您的情况下,两个数组都引用相同的内存,通常称为浅拷贝

您可以创建第一个数组的深度副本,然后更改第二个数组。这对第一个阵列没有影响。
let persons=[{
姓名:'大卫',
名字:“Jeu”
}];
让persons2=JSON.parse(JSON.stringify(persons));
persons2[0]。年龄=29;
控制台日志(人)

console.log(persons2)
对于这些类型的操作,在这里使用

复制其他问题通常是明智的…谢谢,它起作用了,但是为什么这个代码不起作用呢?persons2=[…this.persons]@杰克:这是因为person和person2内部的对象共享相同的引用。因此,其中一个中所做的更改将反映在另一个中。我正在观看youtube的教程:,2:07:00,他也像我一样做了同样的事情,这对他很有效。你能给我解释一下吗?@Jack当然愿意:-)@Jack请在视频中进一步移动指南中提到,新“阵列”上的添加和删除操作不会反映在旧阵列中。但新数组和旧数组中的现有对象保持不变。即,如果在person2两个数组中添加/删除对象,则不会从person数组中添加/删除该对象。
let person2 = JSON.parse(JSON.stringify(person));