我有一個存儲在Javascript對象中的樹結構,我想從頭部(sms_in
)節點提取所有可能的路徑到分支中的最後一個節點。以下是樹結構的示例表示。通過遞歸遍歷一個Javascript對象來累積路徑
注意:任何給定的節點可以具有n個輸出('true'
型)連接的,但只有一個輸入連接。我的意思是,當你想從sms_in
節點到isEmpty1
節點,只有一個路徑[{ 'sms_in' : 'true'} ]
。但是,如果您想從isEmpty1
到dbInsert1
,則必須選擇'false
'路徑,而不是'true
'路徑。你也可以去isEmpty
節點的其他節點(不是在給定的情況下)。但是,您只能從一個路徑(即通過「sms_in
」節點)到達isEmpty
節點。
var graph =
{
"metadata": {"id": "sms_in", "type": "api", "optionsDivId": "div_sms_in", "options": {}},
"data": {
"true": {
"isEmpty1": {
"metadata": {
"id": "isEmpty1",
"type": "empty",
"optionsDivId": "div_isEmpty1",
"options": {}
},
"data": {
"true": {
"sms1": {
"metadata": {
"id": "sms1",
"type": "api",
"optionsDivId": "div_sms1",
"options": {}
}, "data": {"true": {}, "false": false}
}
},
"false": {
"dbInsert1": {
"metadata": {
"id": "dbInsert1",
"type": "dbInsert",
"optionsDivId": "div_dbInsert1",
"options": {}
},
"data": {
"true": {
"sms2": {
"metadata": {
"id": "sms2",
"type": "api",
"optionsDivId": "div_sms2",
"options": {}
}, "data": {"true": {}, "false": false}
}
}, "false": false
}
}
}
}
}
}, "false": false
}
};
在這裏,我有2種類型的節點,其中'if/empty'
類型的節點有'true/false'
類型的子節點,而所有其他節點只有'true'
類型的節點。我想遍歷節點並按照以下方式獲取所有可能情況的完整路徑。
var output = [
[ {'sms_in':'true'}, {'isEmpty1':'true'}, {'sms1':''}],
[{'sms_in':'true'}, {'isEmpty1':'false'}, {'dbInsert1':'true'}, {'sms2':''}]
];
我可以遍歷樹,但我不知道如何積累得到output
陣列形式的完整路徑。 有人可以幫我嗎?
還是不明白你要完成的任務。從頭到特定的葉節點只有一條可能的路徑,所以我不明白「所有可能的路徑」意味着什麼,或者你試圖積累什麼結果。而且,你將什麼定義爲「尾節點」? – jfriend00
@ jfriend00我對問題進行了編輯,請現在檢查問題。 – Fawzan
首先,只有一個頭節點,對吧?然後,我不明白你的意思是「尾節點」。請描述。那麼,對於一個給定的「尾節點」,只有一條路可以到達那裏?或者你的意思是不同的「尾節點」?仍然不理解。什麼是路徑?什麼是尾節點?如何有多條路徑? – jfriend00