Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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
将具有多个父级的图形数据转换为jstree Javascript的数据_Javascript_Algorithm_Jstree - Fatal编程技术网

将具有多个父级的图形数据转换为jstree Javascript的数据

将具有多个父级的图形数据转换为jstree Javascript的数据,javascript,algorithm,jstree,Javascript,Algorithm,Jstree,我有以下要求: 使用SPARQL查询Wikipedia 使用该数据使用jstree构建树 我从查询中获得的数据可以拼接在一起,以显示从一个节点到另一个节点的路径。基本上是一个图形。然后在第二步,我必须将其转换为一棵树(添加一些细微差别) 经过一些处理后,我使用以下数据到达该阶段 //Object contain all nodes {Id:[Array of parents]} 例如,如果我有 {A:[B,C], B:[], C:[]} 表示我的树中有4个节点A有两个父级B和C,而B和C属于

我有以下要求:

  • 使用SPARQL查询Wikipedia
  • 使用该数据使用jstree构建树
  • 我从查询中获得的数据可以拼接在一起,以显示从一个节点到另一个节点的路径。基本上是一个图形。然后在第二步,我必须将其转换为一棵树(添加一些细微差别)

    经过一些处理后,我使用以下数据到达该阶段

    //Object contain all nodes
    {Id:[Array of parents]}
    
    例如,如果我有

    {A:[B,C],
    B:[],
    C:[]}
    
    表示我的树中有4个节点
    A
    有两个父级
    B
    C
    ,而
    B
    C
    属于根。(事实上,此数据不适合于树,但我还是需要这样做)

    问题是jstree数据模型不允许显示相同的ID,所以我需要创建一个额外的伪A。上面的数据将变成相同的东西供jstree使用

    [
    {id:0_A,parent:B},
    {id:1_A,parent:C},
    {id:B,parent:#},
    {id:C,parent:#},
    ]
    
    我不知道该怎么做。我有一种隐约的感觉,我需要递归地遍历父数组中的每个元素,直到它们的父数组中只有一个元素,并相应地创建额外的伪节点。但我无法想出一个全面的方法来做到这一点

    例如:

    {A:[B,C,D],
     B:[],
     C:[],
     D:[B,C]
    }
    //Recursively following B,C,D in A will give us the result that 4 fake A are needed
    //The same in D. Following B and C will lead to 2 node that only have 1 or less result in their parent array--> 2 fake D
    
    会上交吗

    [
    {id:0_A,parent:B},
    {id:1_A,parent:C},
    {id:2_A,parent:0_D},
    {id:3_A,parent:1_D},
    {id:B,parent:#},
    {id:C,parent:#},
    {id:0_D,parent:B},
    {id:1_D,parent:C},
    ]
    
    在上面的树中间

    问题在于jstree数据模型不允许使用相同的ID 提出

    这不完全是真的,实际上它根本不在乎。更重要的是,HTMLTree使每个节点只能有一个父节点

    但是如果你用这个

    [
      {id:'B',text: '#', parent: '#'},
      {id:'A',text: Math.random(), parent: 'B'},
      {id:'A',text: Math.random(), parent: 'B'}, 
      {id:'A',text: Math.random(), parent: 'B'}, 
      {id:'A',text: Math.random(), parent: 'B'}, 
      {id:'A',text: Math.random(), parent: 'B'}
    ]
    
    它们将全部显示在B中

    我认为您所能做的最好的事情就是将回调传递给
    core.data
    并填充子项,或者假设将有子项并在打开时填充

    变体1-在构造上填充

    变奏2-懒惰的雏菊-打开后打开(我做了这个循环以强调它的优势)

  • 论建构
  • $(函数(){
    设dat={
    A:[B','C','D'],
    B:['#'],
    C:['#'],
    D:['B','C']
    }
    函数填充(objId){
    设rtn=[]
    用于(让输入dat){
    if(dat[键]。包括(对象)){
    推({
    文本:键,
    子项:填充(键)
    })
    }
    }
    返回rtn
    }
    $('#jstree').jstree({
    “核心”:{
    “数据”:功能(obj、cb){
    cb.call(此,填充(对象id))
    }
    }
    });
    });
    
    虽然上面的代码没有直接回答我的问题,但它确实帮助我将数据转换为jstree“接受”的替代形式。我决定采用随机、独特的id方法。