原始数据:
let arr1 = [
{
"resourceId": "StartEvent_1", //太爷爷
"outgoing": [{
"resourceId": "Flow_0xcdvi2"//爷爷ID
}],
childList:[]
},
{
"resourceId": "Flow_0xcdvi2", //爷爷
"outgoing": [{
"resourceId": "userrenwu"//父亲ID
}],
childList:[]
},
{
"resourceId": "userrenwu", //父亲
"outgoing": [{
"resourceId": "Flow_0vodf2r"//儿子ID
}],
childList:[]
},
{
"resourceId": "Event_14beign",//孙
"outgoing": [],
childList:[]
},
{
"resourceId": "Flow_0vodf2r", //儿子
"outgoing": [{
"resourceId": "Event_14beign"//孙ID
}],
childList:[]
},
{
"resourceId": "StartEvent_2", //太爷爷的弟弟
"outgoing": [{
"resourceId": "Flow_0xcdvi33"//太爷爷的儿子ID
}],
childList:[]
},
]
想要的结构是:
let arr1 = [
{
"resourceId": "StartEvent_1", //太爷爷
"outgoing": [{
"resourceId": "Flow_0xcdvi2"//爷爷ID
}],
childList:[
{
"resourceId": "Flow_0xcdvi2", //爷爷
"outgoing": [{
"resourceId": "userrenwu"//父亲ID
}],
childList:[
{
"resourceId": "userrenwu", //父亲
"outgoing": [{
"resourceId": "Flow_0vodf2r"//儿子ID
}],
childList:[
{
"resourceId": "Flow_0vodf2r", //儿子
"outgoing": [{
"resourceId": "Event_14beign"//孙ID
}],
childList:[
{
"resourceId": "Event_14beign",//孙
"outgoing": [],
childList:[]
}
]
}
]
}
]
}
]
},
{
"resourceId": "StartEvent_2", //太爷爷的弟弟
"outgoing": [{
"resourceId": "Flow_0xcdvi33"//太爷爷的儿子ID
}],
childList:[]
},
]
传入的参数需要先进行深拷贝, 保证不改变原数据。
setTree这个方法利用了JS引用类型的特点,v 和 child最终会同步, filter最后只需要过滤出需要的层级就OK了。