由具有父子关系数据得到其树结构

结果格式
const treeObj = {
  text: '',
  children: [
    {
      text: '北京',
      children: []
    }, {
      text: '辽宁',
      children: [
        {
          text: '沈阳',
          children: [{
            text: '和平区',
            children: []
          }]
        }, {
          text: '大连',
          children: []
        }
      ]
    }
  ]
};
代码
var str = "北京市,海淀区,温泉镇;湖南省,长沙市,岳麓区,郁林街;广东省,广州市,雨花区;北京市,海淀区,白家疃;南京,海淀区,白家疃;"
var arr = str.split(';');
if(arr[arr.length - 1] == ''){
    arr.pop();
}
var tempMap = {};
function createChild(name,parent){
    var path = '';
    if(parent){
        path = getBranchPath(parent);
        path = path ? path + '.' + name : name;
        if(tempMap[path]){
            return tempMap[path];
        }
    }
    var obj = {};
    obj.text = name;
    obj.children = [];
    if(parent){
        obj.parent = parent;
        parent.children.push(obj);
    }
    path = getBranchPath(obj);
    tempMap[path] = obj;
    return obj;
}
function getBranchPath(obj){
    var path = [];
    path.push(obj.text);
    var parent = obj.parent;
    while(parent && parent.text){
        path.push(parent.text);
        parent = parent.parent;
    }
    return path.reverse().join('.');
}
var treeObj = createChild('');
for(var i=0;i<arr.length;i++){
    var _arr = arr[i].split(',');
    var self,parent = treeObj;
    while(_arr.length){
        var name = _arr.shift();
        self = createChild(name,parent);
        parent = self;
    }
}
for(var p in tempMap){
    delete tempMap[p].parent;
}
console.log(treeObj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值