如何将嵌套的省市区树结构扁平化为指定格式,以满足不同选择的地址获取需求?

如何将嵌套的省市区树结构扁平化为指定格式,以满足不同选择的地址获取需求?

省市区树结构扁平化转换结构

本文旨在解决如何将嵌套的省市区结构树扁平化为指定格式的结构,以满足特定需求。

需求:

如果三级地址都选中了,只获取一级和二级地址。如果二级地址都选中了,只获取一级地址。如果三级地址选中了某些,获取一级、二级和三级地址。

数据结构:

树形结构的数据示例如下:

[  {    "code": "110000",    "value": "北京市",    "checked": "1",    "children": [      {        "code": "110100",        "value": "北京市",        "checked": "1",        "children": [          {            "code": "110101",            "value": "东城区",            "checked": "1"          },          {            "code": "110102",            "value": "西城区",            "checked": "1"          }        ]      }    ]  },  {    "code": "120000",    "value": "天津市",    "checked": "1",    "children": [      {        "code": "120100",        "value": "天津市",        "checked": "1",        "children": [          {            "code": "120101",            "value": "和平区",            "checked": "0"          },          {            "code": "120102",            "value": "河东区",            "checked": "1"          }        ]      }    ]  }]

登录后复制

扁平化处理:

以下是扁平化处理的 JavaScript 代码:

function getNewData(data) {  let d = []  for (let province of data) {    if (province.checked == 1) {      let obj = {        provinceAreald: province.code,        cityAreald: null,  //如2级全部选中为null        countryAreald: null,  //如3级全部选中为null        actualAreaLevel:'1'      }      const cityArr = cityCheck(province, obj, d)      if (cityArr.length == province.children.length) {        Object.assign(obj, {          cityAreald: null,          actualAreaLevel: '1',        })        d.push(obj)  // 2级菜单被选中      } else {        d.push(...cityArr)  // 2级菜单被选中      }    }  }  function cityCheck(province, obj, d) {    let cityArr = []    for (let city of province.children) {      if (city.checked == 1) {        Object.assign(obj, {          cityAreald: city.code,          actualAreaLevel: '2',        })        // 参数obj, d可能被改变        const countryArr = countryCheck(city, obj, d)        if (countryArr.length == city.children.length) {          Object.assign(obj, {            countryAreald: null,            actualAreaLevel: '2',          })          cityArr.push(obj)  // 3级菜单被选中        } else {          d = d.push(...countryArr)  // 3级菜单被选中        }      }    }    return cityArr  }  function countryCheck(city, obj, d) {    let countryArr = []    for (let country of city.children) {      if (country.checked == 1) {        countryArr.push(          Object.assign(obj, {            countryAreald: country.code,            actualAreaLevel: '3',          })        )      }    }    return countryArr  }  return d}const newData = getNewData(data)console.log(newData)

登录后复制

扁平化结果:

[  {    provinceAreald : '110000',    cityAreald: null,  //如2级全部选中为null    countryAreald: null,  //如3级全部选中为null    actualAreaLevel:'1'  },  {    provinceAreald : '120000',    cityAreald: '120100',  //如2级全部选中为null    countryAreald: '120102',  //如3级全部选中为null    actualAreaLevel:'3' //层级  }]

登录后复制

以上就是如何将嵌套的省市区树结构扁平化为指定格式,以满足不同选择的地址获取需求?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2805622.html

(0)
上一篇 2025年3月8日 22:08:36
下一篇 2025年2月28日 12:35:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论