将具有多个父级的图形数据转换为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属于
//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方法。