您当前的位置: 首页 > 

【03】

暂无认证

  • 2浏览

    0关注

    196博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

js数据处理-复杂树构建

【03】 发布时间:2021-05-15 13:26:41 ,浏览量:2

规则

规则 subject_no以小数点为段,每一段数字进行匹配,如:x包含x.y,x.z 未能精确匹配的, x包含x.y.z,x.n.m 未能精确匹配的, x.y包含x.y.z,x.a.b.c.d

初始数据
var no_list = [
        {
            subject_no: '10.3',
        },
        {
            subject_no: '10',
        },
        {
            subject_no: '10.3.1',
        },
        {
            subject_no: '10.4.3.1',
        },
        {
            subject_no: '10.3.2',
        },
        {
            subject_no: '10.4.3',
        },
        {
            subject_no: '10.3.2.1.1',
        },
        {
            subject_no: '10.4.3.2.1',
        },
        {
            subject_no: '10.4.3.2.1.2',
        },
        {
            subject_no: '10.4.3.2.1.0',
        },
        {
            subject_no: '10.4.3.2.1.0.5.6',
        }
    ]
需要处理成的结果数据
var result_tree = [
    {
        subject_no: '10',
        children: [
            {
                subject_no: '10.3',
                children: [
                    {
                        subject_no: '10.3.1',
                    },
                    {
                        subject_no: '10.3.2',
                        children: [
                            {
                                subject_no: '10.3.2.1.1',
                            },
                        ]
                    },
                ]
            },
            {
                subject_no: '10.4.3',
                children: [
                    {
                        subject_no: '10.4.3.1',
                        children: [
                            {
                                subject_no: '10.4.3.2.1',
                                children: [
                                    {
                                        subject_no: '10.4.3.2.1.0',
                                        children: [
                                            {
                                                subject_no: '10.4.3.2.1.0.5.6',
                                            }
                                        ]
                                    },
                                    {
                                        subject_no: '10.4.3.2.1.2',
                                    },
                                ]
                            },
                        ]
                    },
                ]
            },
        ]
    },
]
算法实现
function list2tree(list) {
    // 初始化匹配map
    let map = list.reduce((m, i) => {
        m[i.subject_no] = i
        return m
    }, {})
    let tree = []
    for (let i = 0; i  0; j--) {
            // 从后往前取,直到map中有数据
            let path = pathArr.slice(0, j).join('.')
            // 有数据就放入children
            if (map[path]) {
                if (!map[path].children) {
                    map[path].children = []
                }
                map[path].children.push(list[i])
                break
            }
        }
        j === 0 && tree.push(list[i])
    }
    return tree
}
console.log(list2tree(no_list))
关注
打赏
1657344724
查看更多评论
立即登录/注册

微信扫码登录

0.0373s