我們可以很輕鬆的去遍歷一棵樹,無論是廣度優先遍歷還是深度優先遍歷,那麼怎麼在小程式當中渲染一棵樹呢? 先看一下我們深度優先遍歷的代碼 function dfs(tree) { if(!tree) return console.log(tree.value) if (tree.children) { ...
我們可以很輕鬆的去遍歷一棵樹,無論是廣度優先遍歷還是深度優先遍歷,那麼怎麼在小程式當中渲染一棵樹呢?
先看一下我們深度優先遍歷的代碼
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; }
是不是很簡單就實現了呢?