Избегайте привязки переменных Angular/TypeScript

Мне нужно создать клон моего объекта, не создавая его ссылку. Когда я пытаюсь скопировать EquipmentClass, witch - это мой главный объект для его клона, и если я изменю какое-либо свойство EquipmentClass, это также изменит мой EquipmentClassCloneEdit. И я не хочу, чтобы это случилось.

Я попытался присвоить значение следующим образом:

this.equipmentClassCloneEdit = Object.assign ({}, this.equipmentClass);

это моя модель:

export class EquipmentClass {
    equipmentClassId: number;
    name: string;
    description: string;
    isDeleted: boolean;
    propertyValuesList: EquipmentClassPropertyValue[] = [];
}

2 ответа

Решение

Пытаться this.equipmentClassCloneEdit = JSON.parse(JSON.stringify(this.equipmentClass))

Object.assign() создает поверхностную копию, поэтому она не будет работать с не примитивами, такими как ваш массив propertyValuesList.

Вы можете использовать метод lodash cloneDeep для глубокого клонирования. https://lodash.com/docs/

  1. установить пакет 'lodash'
  2. import cloneDeep from 'lodash/cloneDeep';
  3. просто позвони this.equipmentClassCloneEdit = cloneDeep(this.equipmentClass);

Использование такого рода функций клонирования лучше выполнять с помощью stringify, а затем анализировать решение, поскольку оно также сохраняет члены, которые JSON вводит при строковом преобразовании, например функции, символы, BigInts и т. Д.

Другие вопросы по тегам