遍歷樹形結構的菜單,實現子菜單的添加與刪除。
菜單的樹形結構:node
要實現的功能:編程
這兩種功能都須要遍歷多叉樹。
這就涉及到你們不肯去觸碰的多叉樹遍歷了....剛開始是循環套循環套循環....看得本身都昏了。
後來鼓起勇氣從新來過。函數
遞歸遍歷多叉樹spa
百度百科對遞歸的定義是:程序調用自身的編程技巧稱爲遞歸( recursion)。
而我對遞歸的理解就是把大問題切分紅一個一個小問題。也就是不斷縮小參數範圍。
我在寫遞歸函數的時候是分了三步。code
具體代碼遞歸
export const addMenu = (node, fatherKey, newDirectoryTitle) => { if (!node) { return; } if(node.key === fatherKey) { const child = { type: `${node.key}-${node.childType}`, title: newDirectoryTitle, key: `${node.key}-${node.childType}`, childType: 0, children:[], } node.childType += 1; node.children.push(child); return; } if(node.children && node.children.length > 0) { for(let i =0 ;i < node.children.length; i++) { addMenu(node.children[i],fatherKey,newDirectoryTitle); } } };
刪除子菜單的方法其實也是差很少。只是其中的處理邏輯不同。
回頭再看看以前寫的多叉樹遍歷,其實並不難,只是本身原來對它有了慣性的抗拒。get