省市区树形数据,每一级添加“全部”选项

例如有如下格式的省市区数据,业务需要分别为省、市、区添加“全部”选项。实现方法如下:

// 省市区数据
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
  })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inticaler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值