gpt4 book ai didi

javascript - 使用 treemodel.js 合并两棵树

转载 作者:行者123 更新时间:2023-11-29 10:42:20 26 4
gpt4 key购买 nike

例子: http://jsfiddle.net/yeehawjared/bawv0790/

我正在构建一个可以打开网页的应用程序,加载大型数据树结构的 JSON。 TreeModel.js 解析这个很好,一切都很好。

随着时间的推移,浏览器以更小的数据树的形式接收更新。我正在尝试将 additionalDatamasterTree 结合起来。我想不出一种方法可以同时遍历两者并进行逐个节点的比较。如果可以的话,聚合 node.model.x 属性并添加不存在的子项会很容易。

在下面的代码中,我遍历了额外的数据 - 但我不知道如何有效地将新节点组合到 masterTree。有人可以用伪代码帮助我的方法或指出正确的方向吗?持续更新我的 masterTree 的最佳方式是什么?

非常感谢。

var tree = new TreeModel();
var masterTree = tree.parse(data1);

var additionalData = tree.parse(data2);
additionalData.walk(function (node) {

// compare additionalData to the masterTree
if (node.model.id == masterTree.model.id) {
console.debug('match, combine the attributes')
} else {
// add the additional node to the materTree
}
});

最佳答案

看看这个 fiddle 的例子:http://jsfiddle.net/bawv0790/1/

重要的功能是mergeNodes。它是一个递归函数,接收 2 个节点 n1 和 n2。首先,它根据 n2 更新 n1 的大小,如果 n2 个 child 缺失,则将它们添加到 n1,如果存在,则合并它们。

function mergeNodes(n1, n2) {
var n1HasN2Child, i, n2Child;

// Update the sizes
updateSize(n1, n2);

// Check which n2 children are present in n1
n1HasN2Child = n2.children.map(hasChild(n1));

// Iterate over n2 children
for (i = 0; i < n1HasN2Child.length; i++) {
n2Child = n2.children[i];
if (n1HasN2Child[i]) {
// n1 already has this n2 child, so lets merge them
n1Child = n1.first({strategy: 'breadth'}, idEq(n2Child));
mergeNodes(n1Child, n2Child);
} else {
// n1 does not have this n2 child, so add it
n1.addChild(n2Child);
}
}
}

如果对 child 进行排序,检查 n1 中有哪些 n2 个 child 可以大大改进。

关于javascript - 使用 treemodel.js 合并两棵树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com