克隆 JS 树模型树
Cloning a JS TreeModel tree
我需要克隆我用TreeModel.js制作的树。我真正需要做的是复制它,对其进行更改并检查节点数量是否减少。如果是,请恢复到原始树。这是一个小例子,说明到目前为止我所做的复制它,这是不正确的:
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)
这是一个小提琴。通过查看控制台,您将看到树之间的区别:
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对象,但仍然找不到完全克隆该对象的方法(例如模型等属性的原型...
您可以深度克隆第一棵树的模型,然后再次解析它以获得第二棵树。
以你为例:
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));
重要提示:如果您不深度克隆模型,而只是再次解析它,您最终将得到两个树共享的相同底层模型,这肯定会导致不一致。
我终于找到了一个解决方案,可以帮助任何有相同问题的人:
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
函数将模型作为参数,根的模型似乎工作正常。
编辑:此解决方案可能会带来不一致,因为2棵树基于相同的模型。JNS的解决方案更合适。
为什么不尝试 jQuery 深度拷贝呢?
var dup = jQuery.extend(true, {}, tree)
我试过你的小提琴,但它似乎不起作用。
https://github.com/mrluc/owl-deepcopy 这对
我有用。
newTree = deepCopy(tree)
相关文章:
- 使用树模型 js 异步树遍历
- 在选择未绑定到模型 Angular js 的日期值时使用日期选择器
- 如何在木偶中使用模型事件.js
- 克隆 JS 树模型树
- mongoDB:在具有父引用的模型树结构中查找缺失的文档
- Ember.js要组织为树结构的模型
- 将嵌套文档集合转换为具有父引用的模型树结构
- 没有创建独特的模型?Backbone.js
- Jit树JS&资产预编译错误
- 从控制器访问模型.Angular.js
- 获取mongoDB模型树结构中的所有父文档
- 如何更新集合中的所有模型- Backbone.js
- 升级模型(backbone.js)
- 如何存储“集合”包括本地存储中的所有模型?(backbone.js)
- 将视图模型从JS传递到控制器
- 当需要数组时,我应该如何在视图模型(knocket js)中进行计算
- 拥有不同的请求和响应模型-backbone.js
- 如何查看骨干网中的模型列表.js
- 我如何得到所有选定的下拉值在一个模型angular js
- 在ruby应用中设置事件模型的js json文件