2016-12-05 2 views
3

Как создать глубокую копию в угловом 2, я попытался использовать let newObject = Object.assign({}, myObject), но все же myObject отражает все изменения, сделанные в newObject.Создайте глубокую копию в угловой 2

+0

Я считает его проблема машинопись не angular2. исправьте меня, если я ошибаюсь –

+0

Вы имеете в виду глубокую копию или мелкую копию? http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy –

+0

@SurajRao ok теперь я тоже смущен, я просто хочу сбросить мой объект к состоянию по умолчанию, когда моя работа выполняется с этим объектом. Чтобы сделать это, мне нужно сохранить эту копию по умолчанию, но когда я вношу изменения, все остальные копии также меняются. Как это предотвратить? –

ответ

2

Просто используйте следующую функцию:

/** 
* Returns a deep copy of the object 
*/ 

public deepCopy(oldObj: any) { 
    var newObj = oldObj; 
    if (oldObj && typeof oldObj === "object") { 
     newObj = Object.prototype.toString.call(oldObj) === "[object Array]" ? [] : {}; 
     for (var i in oldObj) { 
      newObj[i] = this.deepCopy(oldObj[i]); 
     } 
    } 
    return newObj; 
} 
0

Попробуйте использовать Lodash.js. Потому что угловой 2 не имеет метода глубокой копии. для справок см: https://lodash.com/docs#cloneDeep

или Вы можете использовать эту функцию Javascript

var copy = Object.assign({}, myObject); 
+0

Считаете ли вы, что включение lodash только для этой функции является разумным? Чтобы добавить 2 номера, вы должны установить math.js? Как бы вы продолжали добавлять случайные сторонние библиотеки для каждой тривиальной задачи, с которой вы столкнулись? – Azarus

+0

, поэтому я дал второй вариант –

+1

я знаю, но это не так печально .. Пожалуйста, обратитесь к документации: Предупреждения для глубокого Clone Для глубокого клонирования, мы должны использовать другие альтернативы, поскольку Object.assign() копирует свойство значения. Если исходное значение является ссылкой на объект, оно копирует только это ссылочное значение. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign – Azarus

Смежные вопросы