Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从树结构对象创建节点和边_Javascript_Mongodb_Algorithm_Tree - Fatal编程技术网

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
?给定数据中没有数组。为什么要检查?你的数据和你的尝试现在不再一致了。