Javascript 从树结构对象创建节点和边
我有一个数组中的树Javascript 从树结构对象创建节点和边,javascript,mongodb,algorithm,tree,Javascript,Mongodb,Algorithm,Tree,我有一个数组中的树 [ '-', [ '+', [ '*', 2, 3 ], 4 ], 3 ] 因此,每个级别由一个运算符和两个操作数组成。每个操作数可以是操作数本身,也可以是包含一个运算符和两个操作数的另一个数组 我需要画一个图,所以我必须从这棵树创建节点和边 我做这个是为了在cytoscape中工作 function walk(arr, prevRootNode) { var rootNode = cy
[
'-',
[
'+',
[
'*',
2,
3
],
4
],
3
]
因此,每个级别由一个运算符和两个操作数组成。每个操作数可以是操作数本身,也可以是包含一个运算符和两个操作数的另一个数组
我需要画一个图,所以我必须从这棵树创建节点和边
我做这个是为了在cytoscape中工作
function walk(arr, prevRootNode) {
var rootNode = cy.add({
group: 'nodes',
data: {
name: arr[0]
}
});
if (prevRootNode) {
cy.add({
group: 'edges',
data: {
source: prevRootNode.id(),
target: rootNode.id()
}
});
}
if (Array.isArray(arr[1])) {
walk(arr[1], rootNode);
} else {
var child1Node = cy.add({
group: 'nodes',
data: {
name: arr[1]
}
});
var child1Edge = cy.add({
group: 'edges',
data: {
source: rootNode.id(),
target: child1Node.id()
}
});
}
if (Array.isArray(arr[2])) {
walk(arr[2], rootNode);
} else {
var child2Node = cy.add({
group: 'nodes',
data: {
name: arr[2]
}
});
var child2Edge = cy.add({
group: 'edges',
data: {
source: rootNode.id(),
target: child2Node.id()
}
});
}
}
walk(ast);
但是代码很难阅读,我宁愿让数据独立于cytoscape,所以我想要一个节点数组和一个边数组,每个边缘都应该有两个字段
source
和target
,这两个字段保存边缘链接在一起的节点的ID。来自第一个示例和代码示例的数据相互关联。你能写出实际的初始化数据和预期的结果吗?Array.isArray
?给定数据中没有数组。为什么要检查?您的数据和您的尝试现在不再一致。来自第一个示例和代码示例的数据相互矛盾。你能写出实际的初始化数据和预期的结果吗?Array.isArray
?给定数据中没有数组。为什么要检查?你的数据和你的尝试现在不再一致了。