一、ES5闭包写法

方法1、分两个步骤
    // 开始递归方法
    var makeTreeOptions = function(params) {
        var result = []
        for (var i = 0; i < params.length;i++) {
            // 判断是否为顶层节点
            if (params[i].parent_id === "0") {
                var parent = params[i]
                parent.children = this.getchilds(params, params[i].category_id, "parent_id", "category_id")  // 获取子节点
                result.push(parent)
            }
        }
        return result
    }

    var getchilds = function (array, id, parentIdKey,idKey) {
        parentIdKey = parentIdKey == undefined ? "parent_id" : parentIdKey;
        idKey = idKey == undefined ? "id" : idKey;
        var childs = []
        // 循环获取子节点
        for (var i = 0; i < array.length; i++) { 
            if (array[i][parentIdKey] === id) {
                childs.push(array[i])
            }
        }
        // 获取子节点的子节点
        for (var i = 0; i < childs.length; i++) { 
            // 递归获取子节点
            var childscopy = getchilds(array, childs[i][idKey],parentIdKey,idKey)
            if (childscopy.length > 0) {
                childs[i].children = childscopy
            }
        }
        return childs
    }

方法2、一步搞定
    // 开始递归方法
    var treeMake = function (params, parent_id, parentIdKey, idKey) {
        parent_id = parent_id == undefined ? "0" : parent_id;
        parentIdKey = parentIdKey == undefined ? "parent_id" : parentIdKey;
        idKey = idKey == undefined ? "id" : idKey;


        var result = []
        var temp = [];
        var resultIndex = 0;
        for (var i = 0; i < params.length; i++) { // 循环获取子节点
            if (params[i][parentIdKey] === parent_id) {
                result.push(params[i])

                if (params[i][idKey]) {
                    temp = treeMake(params, params[i][idKey], parentIdKey, idKey);
                }
                result[resultIndex].children = temp;

                resultIndex = resultIndex + 1;
            }
        }

        return result
    }
最后修改日期: 2022年11月19日

作者