Как скопировать массив, в который вложен элемент в Angular / Typescript? - PullRequest
0 голосов
/ 21 мая 2019

Как я могу клонировать объект класса массива в Angular?

ParentModel {
  id: number;

  child1Id: number;
  child2Id: number;

  child1 : ChildModel;
  child2 : ChildModel;
}

ChildModel{
  id: number;
}

parents: ParentModel [] = [];

Как я могу успешно добиться клонирования родителей, когда у него полно детей?

Редактировать: После поиска нет способасделать это, мы не можем делать самые простые вещи с машинопись / Angular:)
Я создал новый объект и назначить каждое значение вручную для копирования.а также назначить атрибуты дочернего компонента вручную.

Edit2: const clone = JSON.parse (JSON.stringify (parent)) первый ответ на этот вопрос тоже работает нормально, но я не уверен, что он имеет хорошую производительность и правильное решение.

Ответы [ 4 ]

0 голосов
/ 22 мая 2019

Используйте оператор распространения как для родительских, так и для дочерних элементов:

const toClone = (p: ParentModel) => ({
 ... p,
 child1: {... p.child1},
 child2: {... p.child2},
});

const clonedParents: ParentsModel[] = parents.map(toClone);

(Предполагается, что иметь мелкий клон child1 и child2)

0 голосов
/ 22 мая 2019

создайте другой массив того же типа, а затем присвойте ему родительский массив, чтобы вы могли легко скопировать его.

// структура

ParentModel {
  id: number;
  child1Id: number;
  child2Id: number;
  child1 : ChildModel;
  child2 : ChildModel;
}
ChildModel{
  id: number;
}

component.ts

export class ActionComponent implements OnInit
parents: ParentModel [] = [];
parentClone:: ParentModel [] = [];
}    
constructor(){}    
ngOnInit() {
 this.parentClone= this.parents.slice();
}
}

this.parents.slice (); это создаст новый массив и назначит this.parentClone со всеми родительскими данными

0 голосов
/ 22 мая 2019

После долгого поиска

obj = JSON.parse (JSON.stringify (o))

это единственный метод, но более эффективно

либо напишите свой собственныйклонировать или использовать глубокую копию из внешней библиотеки https://hassantariqblog.wordpress.com/2016/10/15/angular2-import-lodash-into-angular2-application-using-typescript/

0 голосов
/ 21 мая 2019

Вы можете достичь этого с помощью deep-copy массива, подобного этому

ParentModel {
  id: number;

  child1Id: number;
  child2Id: number;

  child1 : ChildModel;
  child2 : ChildModel;
}

ChildModel{
  id: number;
}

parents: ParentModel [] = [];
child: ChildModel [] = [];
ngOnInit() {
   this.parents.child1 = {...this.child};
   this.parents.child2 = {...this.child};
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...