我們可以很輕鬆的去遍歷一棵樹,無論是廣度優先遍歷還是深度優先遍歷,那麼怎麼在小程式當中渲染一棵樹呢?
先看一下我們深度優先遍歷的程式碼
function dfs(tree) { if(!tree) return console.log(tree.value) if (tree.children) { for(let i = 0; i < tree.children.length; i++) { dfs(tree.children[i]) } } }
可以看出,深度優先遍歷的演算法是利用遞迴,判斷是否此節點有children屬性,如果有就再次遞迴。
那麼,我們小程式是不是可以定義一個元件,然後,這個元件接收一個object,然後在此元件內,判斷object是否有children,如果有,就迴圈呼叫此元件,是不是就可以了呢?
下面我們來試一試。首先,我們來寫一個元件,名字叫做 TreeNode,會接收一個引數 treeVal
<view> {{treeVal.value}} <view wx:if="treeVal.children" class="children_con"> <block wx:for="{{treeVal.children}}"> <TreeNode treeVal="{{item}}"></TreeNode> </block> </view> </view>
JS部分
Component({ properties: { treeVal: Object } })
CSS部分
.children_con { padding-left: 50rpx; }
是不是很簡單就實現了呢?