const cityData=
`天津市,天津市,宁河区
天津市,天津市,武清区
天津市,天津市,西青区
河北省,石家庄市,高邑县
河北省,石家庄市,藁城区,一个街道,一个小区
河北省,石家庄市,行唐县
`
// 如何将以上字符串转换成下面这种数据结构呢?
// [{
// name: '天津市', children: [
// {
// name: "天津市",
// children: [{
// name: "宁河区"
// }]
// }
// ]
// }]
const cityStrArr = cityData.split('\n') //首先分割成数组
const tree = []
console.time(1)
cityStrArr.forEach(n => {
setChildren(n.split(',')) // 这里n.split(',')分割出来的数组的长度就是递归的深度,
})
console.timeEnd(1)
function setChildren(arr) { // 通过reduce可以设置任意深度的城市数据
arr.reduce((children, n) => { // reduce很像递归,这里完全可以转换成递归
let ob
if (children.length === 0) {
children.push({ name: n, children: [] })
ob = children[0].children
} else {
children.some(m => {
if (m.name == n) {
ob = m.children
return true
}
})
if (!ob) {
let item = { name: n, children: [] }
children.push(item)
ob = item.children
}
}
return ob
}, tree)
}