Клонирование объекта
Необходимо на typescript сделать метод для клонирования объекта. С учетом того, что элементы могут быть ссылкой на этот же объект
Код:
var obj: any = {Код:
function cloneObject(obj) { |
olegyakovlev, писать свой велосипед. Например, можете использовать мой рекурсивный итератор и взять за основу пример из книги рецептов (Deep copy / Deep clone).
|
var cloneObject = (function(global) {
function ObjMap() {
this._data = [];
}
ObjMap.prototype = {
constructor: ObjMap,
_get: function(key) {
for (var i = 0; i < this._data.length; ++i) {
if (this._data[i].key === key) {
return this._data[i];
}
}
return null;
},
get: function(key) {
var data = this._get(key);
return data ? data.value : void(0);
},
set: function(key, value) {
var data = this._get(key);
if (data) {
data.value = value;
} else {
this._data.push({ key: key, value: value });
}
}
};
function cloneObject(obj, map) {
var clone = map.get(obj);
if (clone) {
return clone;
}
clone = {};
map.set(obj, clone);
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
if (obj[i] && typeof obj[i] == "object") {
clone[i] = cloneObject(obj[i], map);
} else {
clone[i] = obj[i];
}
}
}
return clone;
}
return function(obj) {
var map = global.Map ? new Map() : new ObjMap();
return cloneObject(obj, map);
};
})(window);
|
ещё надо добавить поддержку массивов, и возможно некоторых специальных объектов (функции, регексы и т.д.), но к циклам это не относится и в мой код не вошло, дабы не загромождать )
|
Спасибо.
пока сделано следующее решение: Код:
class NewObj { |
| Часовой пояс GMT +3, время: 04:19. |