二维数组的解析

在多选地址区域类型的数据时, 选中的数据如果绑定的是二维数组类型的数据, 但是展示的时候由于数据太多或是某个地区全选的话, 将它解析为XX市全域, 或按照省份/城市将数据解析为容易操作的结构, 如图

 

将以上数据结构进行解析得到以下结构, 便于展示

 

 解析步骤

function myFunction(list) { // 声明一个函数
    const newData = {} // 新建一个对象,用于存放按各省份和城市存放数据
        const resultArr = [] // 新建一个数组,用于存放解析后得数据结构
        list.forEach((v, i) => {
          if (newData[v[0]] !== undefined) {
            if (newData[v[0]][v[1]] !== undefined) {
              newData[v[0]][v[1]].push(v)
            } else {
              newData[v[0]][v[1]] = [v]
            }
          } else {
            newData[v[0]] = { [v[1]]: [v] }
          }
        })
        // eslint-disable-next-line
        for (const key in newData) {
          let num = 0
          // eslint-disable-next-line
          for (const skey in newData[key]) {
            num += newData[key][skey].length
            if (this.getProvinceLength(key) === num) {
              newData[key] = { value: key + '全域' }
            } else if (this.getCityLength(key, skey) === newData[key][skey].length) {
              newData[key][skey] = { sValue: key + skey + '全域' }
            }
          }
        }
        console.log(newData)
        // eslint-disable-next-line
        for (const key in newData) {
          if (!(newData[key] instanceof Array) && newData[key].value) {
            resultArr.push(newData[key].value)
          } else {
            // eslint-disable-next-line
            for (const skey in newData[key]) {
              if (!(newData[key][skey] instanceof Array) && newData[key][skey].sValue) {
                resultArr.push(newData[key][skey].sValue)
              } else {
                const r = newData[key][skey].map(sItem => sItem.join(''))
                resultArr.push(...r)
              }
            }
          }
        }
        console.log(resultArr)
        return resultArr.join(';')
}
myFunction(doubleList); // 调用函数

 需要再定义两个方法, 来查询城市内区域数量和省内区域数量

    // addressList为数据源
    // 获取省的长度
    getProvinceLength(province) {
      let num = 0
      addressList.filter(item => item.name === province)[0].children.forEach(sItem => {
        num += sItem.children.length
      })
      return num
    },

    // 获取城市的长度
    getCityLength(province, city) {
      return addressList.filter(item => item.name === province)[0].children?.filter(sItem => sItem.name === city)[0].children.length
    }

 最后将解析好的数据展示到表格中

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值