结果格式
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)