• js文章列表的树形结构输出


    文章表设计成这样了

    后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来

    var doclist = [{
        "id": 1,
        "level": 1,
        "parent_id": 0,
        "title": "A"
    }, {
        "id": 2,
        "level": 2,
        "parent_id": 1,
        "title": "A1"
    }, {
        "id": 333,
        "level": 2,
        "parent_id": 1,
        "title": "A2"
    }, {
        "id": 10,
        "level": 3,
        "parent_id": 5,
        "title": "B2"
    }, {
        "id": 7,
        "level": 3,
        "parent_id": 2,
        "title": "A3"
    }, {
        "id": 4,
        "level": 1,
        "parent_id": 0,
        "title": "B"
    }, {
        "id": 5,
        "level": 2,
        "parent_id": 4,
        "title": "B1"
    }, {
        "id": 11,
        "level": 2,
        "parent_id": 4,
        "title": "B3"
    }, {
        "id": 12,
        "level": 3,
        "parent_id": 11,
        "title": "B4"
    }, {
        "id": 133,
        "level": 3,
        "parent_id": 11,
        "title": "B5"
    }];
    
    function getDocTree(doclist) {
        var findDoc = function(doc_id) {
            for (var i = 0; i < doclist.length; i++) {
                if (doclist[i].id == doc_id) {
                    return doclist[i];
                }
            }
        }
        var getSeqnum = function(doc_id) {
            var doc = findDoc(doc_id)
            if (doc.level == 1) {
                return '' + doc_id
            } else {
                return getSeqnum(doc.parent_id) + ',' + doc_id;
    
            }
        }
        for (var i = 0; i < doclist.length; i++) {
            var doc = doclist[i]
            doc.seqNum = getSeqnum(doc.id)
        }
    
        return doclist.sort(function(a, b) {
            var al = a.seqNum.split(','),
                bl = b.seqNum.split(',');
            var minLen = al.length > bl.length ? bl.length : al.length;
            var result = 0
            for (var i = 0; i < minLen; i++) {
                if (al[i] > bl[i]) {
                    result = 1;
                    break;
                }
                if (al[i] < bl[i]) {
                    result = -1;
                    break;
                }
            }
            if (result == 0 && al.length > bl.length) result = 1;
            if (result == 1 && al.length > bl.length) result = 1;
            if (result == 1 && al.length == 1) result = 1;
            if (result == 1 && al.length > 1 && al.length < bl.length) result = -1;
    
            return result;
        })
    }
    
    function getDocTree2(doclist) {
        //get max level
        var maxLevel = 1;
        for (var i = 0; i < doclist.length; i++) {
            var doc = doclist[i]
            if (parseInt(doc.level) > maxLevel) {
                maxLevel = parseInt(doc.level)
            }
        }
    
        //loop level
        var parentDoc = []
        for (var L = 1; L <= maxLevel; L++) {
            var subDoc = []
            for (var i = 0; i < doclist.length; i++) {
                var doc = doclist[i]
                if (doc.level == L) {
                    parentDoc.push(doc)
                }
            }
        }
    
    }
    
    //测试
    var doclist2 = [{
        "id": 1,
        "level": 1,
        "parent_id": 0,
        "title": "A"
    }, {
        "id": 5,
        "level": 2,
        "parent_id": 1,
        "title": "A3"
    }, {
        "id": 4,
        "level": 1,
        "parent_id": 0,
        "title": "B"
    }, {
        "id": 6,
        "level": 2,
        "parent_id": 4,
        "title": "B2"
    }, {
        "id": 7,
        "level": 2,
        "parent_id": 4,
        "title": "B3"
    }, {
        "id": 3,
        "level": 2,
        "parent_id": 1,
        "title": "A2"
    }, {
        "id": 2,
        "level": 2,
        "parent_id": 1,
        "title": "A1"
    }];
    
    doclist = getDocTree(doclist)
    
    //增强显示测试结果
    for (var i = 0; i < doclist.length; i++) {
        var doc = doclist[i]
    
        var ots = ''
        for (var s = 1; s < doc.level; s++) {
            ots += '__'
        }
        ots += doc.title
        console.log(ots, doc.seqNum)
    }
    
    
    

    输出结果,排序后的数组直接遍历就能展示出来了

    A 1
    __A1 1,2
    __A2 1,333
    ____A3 1,2,7
    B 4
    __B3 4,11
    __B1 4,5
    ____B4 4,11,12
    ____B5 4,11,133
    ____B2 4,5,10
    
  • 相关阅读:
    简明git教程(单人版本) 阿星小栈
    Laravel SQL 查询语句集锦 阿星小栈
    PHP生成唯一订单号 阿星小栈
    php根据ID生成员工编号 阿星小栈
    laravel框架获取当前url 的方法 阿星小栈
    Laravel 通过Url确定返回错误信息格式 阿星小栈
    电脑用js调用QQ 聊天 阿星小栈
    js 设置cookie和获取cookie 阿星小栈
    php + ajax异步上传文件 阿星小栈
    MISCONF Redis is configured to save RDB snapshots, but it is currently not able to... 阿星小栈
  • 原文地址:https://www.cnblogs.com/wancy86/p/6202222.html
Copyright © 2020-2023  润新知