遞歸調用

func AndLevel(resource []Resource, parentid int64, level int) []Trees {
    //遞歸調用當全部的循環沒有完成的時候是沒有進行child的存值操做
    var len = 0
    var x = 0
    //這裏是爲了計算我存儲數據的slice的長度
    for _, v := range resource {
        if v.ParentId == parentid {
            len = len + 1
        }
    }
    //這裏根據上面取得的長度定義slice
    var tree []Trees = make([]Trees, len)
    if len != 0 {
        for k, v := range resource {
            //這裏的k是不定的,因此須要定義另外的累加值進行累加計數
            //將計數累加放在這裏會致使數組越界,由於沒有知足條件,循環次數會超過上面定義的slice的長度
            if v.ParentId == parentid {
                k = x
                x = x + 1
                //知足條件賦值
                tree[k].Reskey = v.Reskey
                tree[k].IsFunction = v.IsFunction
                tree[k].Icon = v.Icon
                tree[k].Sort = v.Sort
                tree[k].Level = level
                //下級菜單的個數不定因此這裏更改id值和層級 循環再次調用本身
                child := AndLevel(resource, v.ID, level+1)
                //將取出來的值賦值給子項
                tree[k].Children = child
            }
        }
    }
    return tree
}
相關文章
相關標籤/搜索