在多选地址区域类型的数据时, 选中的数据如果绑定的是二维数组类型的数据, 但是展示的时候由于数据太多或是某个地区全选的话, 将它解析为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
}
最后将解析好的数据展示到表格中