如何将省市区树形结构转换成扁平化结构?
我们有一个树形数据结构,表示省市区之间的关系,其中:
每个节点代表一个行政区域。如果一个节点有子节点,则表示该行政区域下有下级行政区域。如果一个节点没有子节点,则表示该行政区域为最底层行政区域。
现在,我们需要将这个树形结构转换成扁平化结构。扁平化结构是一个数组,其中每个元素都是一个对象,包含以下字段:
provinceAreald:省级行政区域的代码。cityAreald:市级行政区域的代码。如果该行政区域为省级,则为 null。countryAreald:区级行政区域的代码。如果该行政区域为省级或市级,则为 null。actualAreaLevel:实际的行政级别。1表示省级,2表示市级,3表示区级。
转换规则如下:
如果一个行政区域的所有下级行政区域都被选中,则该行政区域的市县级行政区域代码和实际行政级别都为 null。如果一个行政区域的部分下级行政区域被选中,则该行政区域的所有下级行政区域的代码和实际行政级别都包含在结果中。
下面是一个将树形结构转换成扁平化结构的 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)
登录后复制
以上就是如何将省市区树形结构转换成扁平化结构?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2805386.html