JS字符串分割转为树结构参考

本文介绍了一个使用JavaScript解析多层次字符串,并将其转换成树形结构数组的方法。该方法首先将字符串按行分割并处理重复项,接着逐行分析创建树节点,最后通过递归消除重复子节点并完成树结构构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

let a="北京/A/海淀 \n" +
    "北京/A/朝阳\n" +
    "北京/B/西城\n" +
    "北京/B/东城\n" +
    "上海/AA/徐汇\n" +
    "上海/AA/黄浦\n" +
    "上海/CC/EE/TT/EEEE/EEEEEE/AAAAAAAAAAAAAAAAAAA/长宁\n" +
    "上海/DD/静安"
function parseTree(multiStr){
    let rawItems=[]
    let arr=[]
    let arrTree=[]
    Array.from(new Set(multiStr.split("\n"))).forEach(function (item, index) {
        let items=item.split("/")
        function cc(level,items){
            if(level>1){
                return {label:items[items.length-level],value:items[items.length-level],children:[cc(level-1,items)]}
            }else{
                return {label:items[items.length-1],value:items[items.length-1]}
            }
        }
        rawItems.push(cc(items.length,items))
    })
    rawItems.forEach(item=>{
        if(arr.indexOf(item.label)===-1){
            arr.push(item.label)
            arrTree.push({label:item.label,value:item.value,children:[]})
        }
        arrTree[arr.indexOf(item.label)].children=arrTree[arr.indexOf(item.label)].children.concat(item.children)
    })
    return arrTree.map(item=>{
        function cc2(tree){
            if(!tree.children||tree.children.length===0){
                return tree
            }else{
                let tmp=[]
                let tmpTree=[]
                tree.children.forEach(item2=>{
                    if(tmp.indexOf(item2.label)===-1){
                        tmp.push(item2.label)
                        if(item2.children){
                            tmpTree.push({label:item2.label,value:item2.value,children:[]})
                        }else{
                            tmpTree.push({label:item2.label,value:item2.value})
                        }
                    }
                    if(item2.children&&item2.children.length>0){
                        tmpTree[tmp.indexOf(item2.label)].children=tmpTree[tmp.indexOf(item2.label)].children.concat(item2.children)
                    }
                })
                tree.children=tmpTree.map(e=>cc2(e))
                return tree
            }

        }
        return JSON.parse(JSON.stringify(cc2(item)))
    })
}
console.log(parseTree(a))

输出为树形结构的JS数组集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

83Dillon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值