zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    ●BZOJ 2669 [cqoi2012]局部极小值
    ●HDU 6021 MG loves string
    试试数学公式~
    ●BZOJ 3622 已经没有什么好害怕的了
    ●BZOJ 2560 串珠子
    ●BZOJ 4361 isn
    ●BZOJ 2393 Cirno的完美算数教室
    ●BZOJ 1042 [HAOI2008]硬币购物
    ●BZOJ 2839 集合计数
    【LG2481】[SDOI2011]拦截导弹
  • 原文地址:https://www.cnblogs.com/wancy86/p/6202222.html
Copyright © 2011-2022 走看看