Просмотр полной версии : Клонирование Object
Есть дерево объектов, которое получено в результате парсинга XML.
Дерево неопределённой структуры.
node1.node2.....nodeX
node1.nodeA.....nodeY
Неопределённое количество ветвей и узлов.
Вне надо клонировать одну ветвь, что-то вроде:
tmp = node1.node2;
Нужен именно дубликат, т.к. с самим деревом будут производиться трансформации.
Всё написано на AS2.
Подскажите, как сделать клон объекта/ветви?
var xml:XML =
<tree>
<item>
<val>init</val>
</item>
<item />
</tree>;
var node:XMLList=new XMLList(xml.item[0]);
var nodeCopy:XMLList=node.copy();
node.val="changed";
trace("node:"+node);
trace("nodeCopy: "+nodeCopy);
var xml:XML =
<tree>
<item>
<val>init</val>
</item>
<item />
</tree>;
var node:XMLList=new XMLList(xml.item[0]);
var nodeCopy:XMLList=node.copy();
node.val="changed";
trace("node:"+node);
trace("nodeCopy: "+nodeCopy);
нет, делево получено в результате моего парсинга и оно не является объектом класса XML
Зря я написал про XML.
Это просто дерево объектов, неопределённой структуры, вида
-----------obj--------------
| | |.....
obj2 obj4
| |
obj3 ----obj5-----
| | |
objX objY objZ
Структура произвольная.
И мне надо скопировать одну из ветвей (например obj5)
и ещё, специально отдельным сообщением для модератора:
я ошибся в первом посте, когда написал про AS3, это опечатка! Скрипт на AS2
'только не в лотерею, а в карты, не машину а сто рублей, и не выиграл, а проиграл..':)
только не AS3 и не XML..
тогда можно рекурсией обойти нод, как-то так:
function cloneObj(obj){
var clone={};
var cont=0;
for( var i in obj){
clone[i]=cloneObj(obj[i]);
cont++;
}
return cont ? clone : obj;
}
var tree={node1:{node11:{node111:111,node112:112},node12:12},node2:{node22:22}};
var node=tree.node1;
nodeCopy=cloneObj(node);
node.node11.node111="XXX";
trace(nodeCopy.node11.node111);//111
'только не в лотерею, а в карты, не машину а сто рублей, и не выиграл, а проиграл..':)
только не AS3 и не XML..
тогда можно рекурсией обойти нод, как-то так:
function cloneObj(obj){
var clone={};
var cont=0;
for( var i in obj){
clone[i]=cloneObj(obj[i]);
cont++;
}
return cont ? clone : obj;
}
var tree={node1:{node11:{node111:111,node112:112},node12:12},node2:{node22:22}};
var node=tree.node1;
nodeCopy=cloneObj(node);
node.node11.node111="XXX";
trace(nodeCopy.node11.node111);//111
Блин, рекурсией - это через... неправильно это, темболее, что дерево строится рекурсией и пробегать по нему ещё несколько раз это расточительно.
неужели в языке, который претендует на роль объектно-ориентированного языка нет механизма клонирования объектов???
темболее, что дерево строится рекурсией и пробегать по нему ещё..
что мешает строить сразу и клоны..
неужели в языке, который претендует на роль объектно-ориентированного языка нет..
похоже, что ты не зря пришел в раздел AS3 и описался с XML.., ты на пути к языку, который претендует.. и правильному его использованию..:)
что мешает строить сразу и клоны..
Я могу узнать, нужны ли клоны, только во время построения дерева (потом уже поздно), но для этого мне придётся внутри рекурсивного вызова функции вызывать другую рекурсивную функцию. :)
Class ObjectUtil
Methods:
copy(value:Object):Object
[static] Copies the specified Object and returns a reference to the copy.
copyright (http://riapriority.com/blogs/agahov.php?cat=41)
but only for flex project :(
Чего прикажете с темой делать? Двигать отсюдова или оставить? Вот, честно, я не знаю, чего с ней делать.
В следующий раз выбирайте разделы правильно.
RetKiller
20.03.2009, 15:44
Никакого отношения именно в AS3 тема,по-моему скромному мнению,не имеет...
рекурсией - это через... неправильно это,
У вас и дерево "через ..." построено,и клон "через ..." сделаете. Полный клон :D
Чем вам так рекурсия не мила?
Вы на даты сообщений смотрели?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.