例如有如下格式的省市区数据,业务需要分别为省、市、区添加“全部”选项。实现方法如下:
// 省市区数据
let cityList = [
{
code: 110000,
name: '北京',
fullName: '中国,北京',
pinyin: 'Beijing',
childNodes: [
{
code: 110100,
name: '北京市',
fullName: '中国,北京,北京市',
pinyin: 'Beijing',
childNodes: [
{
code: 110101,
name: '东城区',
fullName: '中国,北京,北京市,东城区',
pinyin: 'Dongcheng',
childNodes: null
},
......
{
code: 110229,
name: '延庆县',
fullName: '中国,北京,北京市,延庆县',
pinyin: 'Yanqing',
childNodes: null
}
]
}
]
},
{
code: 130000,
name: '河北省',
fullName: '中国,河北省',
pinyin: 'Hebei',
childNodes: [
{
code: 130100,
name: '石家庄市',
fullName: '中国,河北省,石家庄市',
pinyin: 'Shijiazhuang',
childNodes: [
{
code: 130102,
name: '长安区',
fullName: '中国,河北省,石家庄市,长安区',
pinyin: "Chang'an",
childNodes: null
},
......
{
code: 130133,
name: '赵县',
fullName: '中国,河北省,石家庄市,赵县',
pinyin: 'Zhaoxian',
childNodes: null
}
]
},
{
code: 130300,
name: '秦皇岛市',
fullName: '中国,河北省,秦皇岛市',
pinyin: 'Qinhuangdao',
childNodes: [
{
code: 130302,
name: '海港区',
fullName: '中国,河北省,秦皇岛市,海港区',
pinyin: 'Haigang',
childNodes: null
},
......
{
code: 130324,
name: '卢龙县',
fullName: '中国,河北省,秦皇岛市,卢龙县',
pinyin: 'Lulong',
childNodes: null
}
]
}
]
},
]
使用递归方式实现:
console.log(loopFun(data, true))
// 循环
function loopFun (arr, isFir = false) {
if (isFir) {
arr.unshift({
code: 100000,
name: '中国',
fullName: '中国',
pinyin: 'zhongguo',
childNodes: null,
})
}
return arr.map(x => {
let obj = {
code: Number(x.code + '1'),
name: '全部',
fullName: x.fullName,
pinyin: 'quanbu',
childNodes: null,
}
if (x.childNodes && x.childNodes.length) {
x.childNodes.unshift(obj)
loopFun(x.childNodes)
}
return x
})
}