本地的所有省市区数据如图:
后台只返回一个区的areaId,怎么推算出市的、省的areaId,按顺序放到一个数组里,[省areaId,市areaId,区areaId]?
补充:(后台返回的areaId不一定是区这个级别的,有可能是上一级的市或省的,也可能是下级县、街道的,最终想要随便给我一个areaId,让我推出所有上级的areaId)
本地的所有省市区数据如图:
后台只返回一个区的areaId,怎么推算出市的、省的areaId,按顺序放到一个数组里,[省areaId,市areaId,区areaId]?
补充:(后台返回的areaId不一定是区这个级别的,有可能是上一级的市或省的,也可能是下级县、街道的,最终想要随便给我一个areaId,让我推出所有上级的areaId)
递归实现深度优先遍历:area 是你截图的数据结构,id 是你要查找的 id ,返回的 temp 数组是这个 id 的所有父节点
familyTree (area, id) {
var temp = []
var forFn = function (arr, id) {
for (var i = 0; i < arr.length; i++) {
var item = arr[i]
if (item.id === id) {
temp.push(item)
forFn(area, item.parentId)
break
} else {
if (item.children) {
forFn(item.children, id)
}
}
}
}
forFn(area, id)
return temp
}
提供一种思路
可以先将树形数据递归处理为一维数组,这样查找会方便一些
// tree
[
{
id: '001',
children: [
{
id: '001_01'
},
{
id: '001_02'
}
]
}
]
转换为
[
{
id: '001',
parentId: ''
},
{
id: '001_01',
parentId: '001',
},
{
id: '001_02',
parentId: '001'
},
]
在这个基础上,还可以扩展.每个item加上path
[
{
id: '001',
parentId: '',
path: ['001']
},
{
id: '001_01',
parentId: '001',
path: ['001', '001_01']
},
{
id: '001_02',
parentId: '001',
path: ['001', '001_02']
},
]
13 回答13.1k 阅读
8 回答3k 阅读
3 回答1.6k 阅读✓ 已解决
2 回答5.3k 阅读✓ 已解决
5 回答1.6k 阅读
7 回答2.3k 阅读
3 回答2.4k 阅读✓ 已解决