4

我有两个名为“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]);
  }

}
4

3 回答 3

8

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

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

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

或者

let person2 = JSON.parse(JSON.stringify(person));
于 2018-07-28T17:18:20.423 回答
1

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

在此处输入图像描述

您可以制作第一个数组的深层副本,然后更改第二个数组。这对第一个阵列没有影响。

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

let persons2 = JSON.parse(JSON.stringify(persons));
persons2[0].age = 29;

console.log(persons)
console.log(persons2)

于 2018-07-28T17:19:58.667 回答
1

对于这些类型的操作,使用Lodash Clonedeep通常是明智的

于 2018-07-28T17:48:27.383 回答