如何将省市区树形结构转换成扁平化结构?

如何将省市区树形结构转换成扁平化结构?

如何将省市区树形结构转换成扁平化结构?

我们有一个树形数据结构,表示省市区之间的关系,其中:

每个节点代表一个行政区域。如果一个节点有子节点,则表示该行政区域下有下级行政区域。如果一个节点没有子节点,则表示该行政区域为最底层行政区域。

现在,我们需要将这个树形结构转换成扁平化结构。扁平化结构是一个数组,其中每个元素都是一个对象,包含以下字段:

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)

以上就是如何将省市区树形结构转换成扁平化结构?的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何获取上传文件的本地机器路径?
上一篇 2025年12月22日 03:16:10
键盘上的 108 Keycode 代表什么?
下一篇 2025年12月22日 03:16:19

相关推荐

  • 支付宝双十一花呗临时额度怎么开通_支付宝11.11花呗临时额度开通

    支付宝双十一花呗临时额度怎么开通_支付宝11.11花呗临时额度开通支付宝双十一花呗临时额度怎么开通_支付宝11.11花呗临时额度开通支付宝双十一花呗临时额度怎么开通_支付宝11.11花呗临时额度开通支付宝双十一花呗临时额度怎么开通_支付宝11.11花呗临时额度开通

    支付宝双十一期间可通过参与“马上提额”活动、领取限时额度券、完成信用任务或转入余额宝资金四种方式提升花呗临时额度,具体操作包括点击翻倍按钮、领取系统发放的额度券、提交公积金社保记录等材料审核通过后获取提额资格。 如果您在备战双十一购物节时发现花呗额度不足,支付宝通常会推出限时活动为用户提供花呗临时额…

    2026年9月28日 • 用户投稿
    100
  • PHP中静态数组的优势与应用详解

    静态数组是PHP中一个重要的概念,理解其特性有助于编写更高效、更易于维护的代码。本文将详细介绍静态数组与普通数组的区别,以及静态数组在实际开发中的应用场景。 静态变量的作用域与生命周期 在PHP中,使用static关键字声明的变量具有特殊的性质。与普通变量不同,静态变量在函数或方法调用结束后不会被销…

    2026年9月28日
    100
  • VSCode如何集成Git版本控制 VSCode中Git操作的便捷技巧

    首先确认git已安装并配置好用户名和邮箱;2. vscode通常自动检测git,若未检测到可手动在设置中指定git.path;3. 在vscode中打开项目并使用内置终端运行git init初始化仓库;4. 通过左侧源代码管理图标暂存、提交和推送更改;5. 遇到提交乱码时将files.encodin…

    2026年9月28日
    200
  • 和豆包一样的ai图片生成工具2025推荐top10

    2025年AI图片生成工具选择多样,boardmix因支持文生图、图生图、AI抠图、多种风格及在线协作,适合初学者与团队使用,且提供免费版,成为易用性高、功能全面的优选之一。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 2025年,想找个…

    2026年9月28日
    000
  • Meta 开放 Quest 操作系统 学习安卓推动混合现实行业进步

    Meta 开放 Quest 操作系统 学习安卓推动混合现实行业进步Meta 开放 Quest 操作系统 学习安卓推动混合现实行业进步Meta 开放 Quest 操作系统 学习安卓推动混合现实行业进步Meta 开放 Quest 操作系统 学习安卓推动混合现实行业进步

    最近,全球领先的科技公司Meta宣布将其Quest操作系统向第三方开放,这一举措标志着混合现实行业的一个重大进步。 过去,Meta 的 Quest 操作系统采用类似苹果的封闭模式,但如今,公司决定将其转变为更开放的 Android 模式,以鼓励其他硬件制造商利用 Meta 的平台,共同开发虚拟现实设…

    2026年9月28日 • 用户投稿
    000
  • 十大燃气热水器品牌TOP排行榜(为您推荐市场上最优质的燃气热水器品牌)

    十大燃气热水器品牌TOP排行榜(为您推荐市场上最优质的燃气热水器品牌)十大燃气热水器品牌TOP排行榜(为您推荐市场上最优质的燃气热水器品牌)十大燃气热水器品牌TOP排行榜(为您推荐市场上最优质的燃气热水器品牌)十大燃气热水器品牌TOP排行榜(为您推荐市场上最优质的燃气热水器品牌)

    随着人们生活水平的提高,燃气热水器成为现代家庭不可或缺的家电之一。然而,在市场上众多的品牌中,如何选择一款性能出色、品质可靠的燃气热水器成为了许多消费者的难题。本文将以十大燃气热水器品牌top排行榜为主题,为广大消费者推荐市场上最优质的燃气热水器品牌,帮助大家更好地选择适合自己的产品。 一、品牌xx…

    2026年9月28日 • 用户投稿
    200
  • linux怎么查看端口是否被占用

    linux怎么查看端口是否被占用linux怎么查看端口是否被占用linux怎么查看端口是否被占用linux怎么查看端口是否被占用

    Linux系统上检查端口占用情况:使用 netstat 命令:netstat -tnlp | grep 使用其他工具:lsoffuserss 如何检查 Linux 上的端口占用情况 在 Linux 系统上,您可以使用以下命令来检查特定端口是否被占用: netstat -tnlp | grep 其中:…

    2026年9月28日 • 用户投稿
    000
  • 分享win7关闭待机密码的方法

    分享win7关闭待机密码的方法分享win7关闭待机密码的方法分享win7关闭待机密码的方法分享win7关闭待机密码的方法

    一键重装win7后,为了防止电脑重要资料泄露通常都会设置待机密码。但是每次都需要输入密码还是很麻烦的。那么,要如何关闭win7待机密码呢?此文小编就为大家分享win7关闭待机密码的方法。 1、首先可以点击“开始”图标,直接选择控制面板。 2、接着把查看方式改为小图标,直接点击“电源”选项。 3、然后…

    2026年9月28日 • 用户投稿
    000
  • 拼多多官网入口直接打开 拼多多网页版不用登录

    拼多多官网入口直接打开 拼多多网页版不用登录拼多多官网入口直接打开 拼多多网页版不用登录拼多多官网入口直接打开 拼多多网页版不用登录拼多多官网入口直接打开 拼多多网页版不用登录

    拼多多官网可通过浏览器直接访问https://www.pinduoduo.com,无需下载App即可浏览商品,支持扫码登录、拼团购物、限时秒杀及百亿补贴活动,网页版界面简洁,分类清晰,具备关键词搜索与筛选功能,未登录也可查看商品详情,便于比价;平台覆盖多品类商品,设有专题推荐,提升选购效率,且网页端…

    2026年9月28日 • 用户投稿
    000
  • 豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法

    豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法

    通过个人主页动态可直接查看按时间倒序排列的小组发帖与回复;2. 在小组内使用搜索功能输入用户名或关键词筛选个人发帖;3. 借助爱豆搜等外部工具输入ID和关键词高效检索历史帖子。 如果您在豆瓣小组中发布了多个帖子,但无法快速找到自己之前的发言记录,可能是因为缺少直接的“我的帖子”聚合功能。以下是几种在…

    2026年9月28日 • 用户投稿
    000
  • 夸克扫描提取的表格是图片怎么办_夸克表格识别结果转为Excel文件方法

    夸克扫描提取的表格是图片怎么办_夸克表格识别结果转为Excel文件方法夸克扫描提取的表格是图片怎么办_夸克表格识别结果转为Excel文件方法夸克扫描提取的表格是图片怎么办_夸克表格识别结果转为Excel文件方法夸克扫描提取的表格是图片怎么办_夸克表格识别结果转为Excel文件方法

    首先确认是否启用表格识别模式,打开夸克App进入扫描界面,选择历史记录中的表格图片,点击“重新识别”并选用“表格识别”模式,完成后导出为Excel;若效果不佳,可将图片保存至相册后使用Microsoft Lens等OCR工具提取表格并导出.xlsx文件;还可通过浏览器桌面模式登录夸克账号,利用电脑端…

    2026年9月28日 • 用户投稿
    000
  • Android RecyclerView优化:通过DiffUtil实现增量更新

    Android RecyclerView优化:通过DiffUtil实现增量更新Android RecyclerView优化:通过DiffUtil实现增量更新Android RecyclerView优化:通过DiffUtil实现增量更新Android RecyclerView优化:通过DiffUtil实现增量更新

    本教程旨在解决RecyclerView在数据更新时(尤其是新增数据)出现的全量刷新和闪烁问题。通过详细介绍Android DiffUtil机制,我们将学习如何高效地进行列表项的增量更新,从而提升用户体验,避免不必要的UI重绘,特别适用于实时聊天等频繁数据变动的场景。 在开发Android应用时,Re…

    2026年9月28日 • 用户投稿
    100
  • 小米盒子电视远程安装教程(迅捷操作)

    小米盒子电视远程安装教程(迅捷操作)小米盒子电视远程安装教程(迅捷操作)小米盒子电视远程安装教程(迅捷操作)小米盒子电视远程安装教程(迅捷操作)

    随着智能电视的普及,小米盒子电视作为一款功能强大且性价比极高的智能电视盒子,备受用户喜爱。然而,由于某些原因,用户可能无法亲自前往实体店购买和安装,这时就需要通过远程安装来实现使用。本文将为大家详细介绍小米盒子电视的远程安装教程,帮助用户迅捷操作,轻松畅享智能电视。 一、购买小米盒子电视之前需要了解…

    2026年9月28日 • 用户投稿
    100
  • 通过MySQL开发实现数据分析与机器学习的项目经验分享

    通过MySQL开发实现数据分析与机器学习的项目经验分享通过MySQL开发实现数据分析与机器学习的项目经验分享通过MySQL开发实现数据分析与机器学习的项目经验分享通过MySQL开发实现数据分析与机器学习的项目经验分享

    在现代科技时代,数据分析和机器学习技术的应用已经广泛渗透到了各个领域中,成为了许多企业和机构优化业务和提升效率的重要手段。而这些应用的实现离不开高效可靠的数据存储和处理,而MySQL作为一种经典的关系型数据库管理系统,被广泛应用于数据存储和管理。本文将分享我在MySQL开发中实现数据分析和机器学习项…

    2026年9月28日 • 用户投稿
    000
  • 缝合战神的新游《Echoes of the End》发售一周!Steam好评率升至62%

    缝合战神的新游《Echoes of the End》发售一周!Steam好评率升至62%缝合战神的新游《Echoes of the End》发售一周!Steam好评率升至62%缝合战神的新游《Echoes of the End》发售一周!Steam好评率升至62%缝合战神的新游《Echoes of the End》发售一周!Steam好评率升至62%

    由Myrkur Games打造的电影化第三人称动作冒险游戏《Echoes of the End》已于上周正式上线。近日,海外媒体wccftech发布了对该作的评测,最终仅给出5.7分的中偏低评价。 评测指出,《Echoes of the End》整体表现弊大于利。尽管游戏在视觉表现、以角色为核心的叙…

    2026年9月28日 • 用户投稿
    000
  • 方正证券APP怎么卖出股票_方正证券APP股票卖出操作指南

    方正证券APP怎么卖出股票_方正证券APP股票卖出操作指南方正证券APP怎么卖出股票_方正证券APP股票卖出操作指南方正证券APP怎么卖出股票_方正证券APP股票卖出操作指南方正证券APP怎么卖出股票_方正证券APP股票卖出操作指南

    首先登录方正证券APP,进入交易页面找到持仓股票,点击卖出并输入数量和价格(可选限价或市价委托),确认信息后提交订单,资金T+1日可提现。 在方正证券APP上卖出股票,操作简单直接。打开APP登录账户后,找到持有的股票,输入想卖的数量和价格,确认信息无误提交即可。整个过程几分钟就能完成,关键是注意交…

    2026年9月28日 • 用户投稿
    000
  • linux怎么查看内存大小

    linux怎么查看内存大小linux怎么查看内存大小linux怎么查看内存大小linux怎么查看内存大小

    可使用以下命令查看 Linux 系统中的内存大小:freetopvmstatcat /proc/meminfo 如何查看 Linux 系统中的内存大小 1. 使用 free 命令 free 命令是查看系统内存状态最常用的命令。它显示了总内存、已用内存、空闲内存、共享内存、缓冲区和缓存。 free 2…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么配置clangd进行c++代码补全_Clangd插件C++环境配置

    sublime怎么配置clangd进行c++代码补全_Clangd插件C++环境配置sublime怎么配置clangd进行c++代码补全_Clangd插件C++环境配置sublime怎么配置clangd进行c++代码补全_Clangd插件C++环境配置sublime怎么配置clangd进行c++代码补全_Clangd插件C++环境配置

    配置Clangd实现C++智能补全,需安装LSP插件和Clangd服务器,并通过compile_commands.json告知编译信息,从而获得语义级代码补全、实时诊断与重构支持,显著提升Sublime Text的C++开发体验。 在Sublime Text里配置Clangd来搞定C++代码补全,说…

    2026年9月28日 • 用户投稿
    000
  • 通过MySQL开发实现数据可视化与报表分析的项目经验分享

    通过MySQL开发实现数据可视化与报表分析的项目经验分享通过MySQL开发实现数据可视化与报表分析的项目经验分享通过MySQL开发实现数据可视化与报表分析的项目经验分享通过MySQL开发实现数据可视化与报表分析的项目经验分享

    在当今数据大爆炸的时代,数据分析和数据可视化成为了企业决策的重要工具。作为一名开发人员,在MySQL数据库上开发实现数据可视化与报表分析的项目经验,我想和大家分享一下。 首先,我想提到的是选择MySQL作为数据库的原因。MySQL是一款开源的关系型数据库管理系统,它具有稳定性高、性能优秀以及可扩展性…

    2026年9月28日 • 用户投稿
    000
  • Win7资源管理器总是提示已停止工作的解决方法

    Win7资源管理器总是提示已停止工作的解决方法Win7资源管理器总是提示已停止工作的解决方法Win7资源管理器总是提示已停止工作的解决方法Win7资源管理器总是提示已停止工作的解决方法

    使用电脑过程中难免会遇到各种问题,近期有不少win7用户向小编反映,在操作电脑时频繁出现“windows资源管理器已停止工作”的提示。这种情况通常由误操作或某些恶意软件、病毒篡改系统设置所引起。那么应该如何有效解决这一故障呢?接下来,黑鲨小编将为大家详细介绍win7系统中资源管理器频繁崩溃的应对方法…

    2026年9月28日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信