首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS TreeModel树的克隆

JS TreeModel树的克隆
EN

Stack Overflow用户
提问于 2014-12-15 09:58:05
回答 4查看 2.6K关注 0票数 7

我需要克隆一棵我用TreeModel.js制作的树。我真正需要做的是复制它,对它进行更改,并检查节点数量是否减少。如果是的话,恢复到原来的树。下面是我迄今为止复制它的一个小例子,这是不正确的:

代码语言:javascript
复制
var tree = new TreeModel();
var root = tree.parse({
    id: 0,
    name: "Root",
    children: [{id: 1, name: "1", children: []},{id: 2, name: "2", children: []}]
});

console.log(root)
var dup = tree.parse(root)
console.log(dup)

这是一个小提琴。通过查看控制台,您将看到树之间的区别:

代码语言:javascript
复制
Node {config: Object, model: Object, children: Array[2], isRoot: function, hasChildren: function…}
Node {config: Object, model: Node, children: Array[2], isRoot: function, hasChildren: function…}

有没有办法正确地复制这样的结构?我寻找了克隆JS对象的方法,但仍然找不到准确克隆这个对象的方法(比如像模型这样的属性的原型.)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-15 11:09:08

您可以深入克隆第一棵树的模型,并再次解析它以获得第二棵树。

以你为例:

代码语言:javascript
复制
function deepCopy(obj) {
    // You can also use the jquery extend method here
    return JSON.parse(JSON.stringify(obj));
}

var dup = tree.parse(deepCopy(root.model));

重要的是:如果您不深入克隆模型,并再次解析它,您最终将得到两个树共享的相同的底层模型,这肯定会导致不一致。

票数 3
EN

Stack Overflow用户

发布于 2014-12-15 10:52:26

我终于找到了一个解决方案,可以帮助任何有同样问题的人:

代码语言:javascript
复制
var tree = new TreeModel();
var root = tree.parse({
    id: 0,
    name: "Root",
    children: [{id: 1, name: "1", children: []},{id: 2, name: "2", children: []}]
});

console.log(root)
var dup = tree.parse(root.model)
console.log(dup)

parse函数以一个模型作为参数,根的模型似乎工作得很好。

编辑:这个解决方案可能会带来不一致,因为这两个树是基于相同的模型。JNS的解决方案更合适。

票数 1
EN

Stack Overflow用户

发布于 2014-12-15 10:30:29

为什么不尝试一个jQuery深拷贝呢?

代码语言:javascript
复制
var dup = jQuery.extend(true, {}, tree)

我试过你的小提琴,但似乎不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27481417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档