如何将省市区三级树状结构数据扁平化处理并根据选中状态精简结果?

将省市区三级树状结构数据扁平化处理,并根据选中状态精简结果

本文介绍如何将省市区三级树状结构数据扁平化,并根据选中状态精简结果。原始数据采用树形结构,包含省份、城市和区县信息及选中状态(checked: 1 表示选中)。目标是生成一个扁平化结构,仅包含必要的区域代码和层级信息。

原始数据示例:

[  {    "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" }        ]      }    ]  }]

目标扁平化结构:

如果所有三级区域都被选中,则只保留一级和二级区域代码;如果所有二级区域都被选中,则只保留一级区域代码;如果三级区域只选中部分,则保留一级、二级和三级区域代码。

[  {    "provinceAreald": "110000",    "cityAreald": null,    "countryAreald": null,    "actualAreaLevel": "1"  },  {    "provinceAreald": "120000",    "cityAreald": "120100",    "countryAreald": "120102",    "actualAreaLevel": "3"  }]

JavaScript 函数实现:

以下 JavaScript 函数 flattenData 实现数据扁平化:

function flattenData(data) {  const result = [];  function processNode(node, parent) {    if (node.checked === "1") {      const item = {        provinceAreald: parent ? parent.code : node.code,        cityAreald: null,        countryAreald: null,        actualAreaLevel: '1'      };      if (node.children) {        const allChildrenChecked = node.children.every(child => child.checked === "1");        if (allChildrenChecked) {          item.actualAreaLevel = node.children[0].children ? '2' : '1';          if(node.children[0].children){            item.cityAreald = node.children[0].code;          }        } else {          item.actualAreaLevel = '2';          item.cityAreald = node.code;          for (const child of node.children) {            processNode(child, item);          }          return;        }      }      result.push(item);    } else if (node.children) {      for (const child of node.children) {        processNode(child, node);      }    }  }  for (const node of data) {    processNode(node);  }  return result;}// 示例用法const data = [/* ...原始数据 ... */];const flattenedData = flattenData(data);console.log(flattenedData);

此函数采用递归方式处理树形结构,根据选中状态和子节点的选中情况,动态调整actualAreaLevelcityAreald, countryAreald字段的值,最终生成精简的扁平化数据。 代码也进行了优化,减少了不必要的函数嵌套,提高了可读性和效率。

如何将省市区三级树状结构数据扁平化处理并根据选中状态精简结果?

以上就是如何将省市区三级树状结构数据扁平化处理并根据选中状态精简结果?的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月22日 09:51:25
下一篇 2025年12月22日 09:51:32

相关推荐

  • 在设计管理后台PC端页面时,如何选择合适的设计图尺寸并进行布局调整?

    管理后台PC端页面设计:尺寸与布局优化指南 设计管理后台PC端页面时,选择合适的尺寸和布局至关重要。 常见的疑问是:管理后台PC端页面的设计尺寸是多少? 通常,设计图尺寸以1920*1080为基准。 这是因为现代网页设计强调自适应布局,页面内容可根据不同屏幕高度自动调整,通过滚动显示完整内容。因此,…

    好文分享 2025年12月22日
    000
  • 如何使用CSS Flexbox实现2:5:3比例的自适应高度布局?

    利用css flexbox轻松构建2:5:3比例的自适应高度布局 本文介绍如何使用CSS弹性盒模型(Flexbox)创建一个容器,其内部三个子元素的高度比例精确为2:5:3,并能根据屏幕尺寸自动调整,始终保持比例和填充父容器高度。 我们需要一个包含三个子元素的容器,这三个子元素的高度比例需保持2:5…

    好文分享 2025年12月22日
    000
  • vivo浏览器JS加载失败:如何解决304 Not Modified缓存问题?

    vivo浏览器js加载失败排查 在使用vivo自带浏览器访问H5页面时,部分用户反馈JavaScript代码无法正常加载执行的问题。本文将针对此问题进行深入分析,并提供相应的解决方案。 问题描述中,开发者提供了一个包含jQuery和自定义JS文件的HTML页面。页面中的标签内代码以及$(docume…

    好文分享 2025年12月22日
    000
  • SVG文字动画如何实现复用和参数传递?

    svg文字动画的灵活复用与动态参数控制 SVG在创建动画和图形方面具有显著优势,use标签可以有效复用已定义的图形元素,提高代码效率和可维护性。然而,当需要复用SVG文字元素且文字内容需要动态变化时,简单的use标签便显得不够灵活。本文将探讨如何在SVG中实现文字内容的动态更新和高效复用。 直接使用…

    好文分享 2025年12月22日
    000
  • 如何通过CSS实现鼠标滚轮的横向滚动效果?

    CSS妙招:轻松实现鼠标滚轮横向滚动 网页设计中,我们常常需要鼠标滚轮实现横向滚动,尤其是在水平方向排列内容较多的场景。默认情况下,滚轮通常控制纵向滚动,需要按住Shift键才能横向滚动,这并不方便。虽然JavaScript可以监听滚轮事件并控制横向滚动条,但这种方法可能导致滚动不够流畅。 本文介绍…

    2025年12月22日
    000
  • Vue.js表单校验:如何有效处理深层嵌套数组数据更新及校验失效问题?

    vue.js表单校验:应对深层嵌套数组数据更新难题 在Vue.js表单开发中,复杂数据结构(例如多层嵌套数组)的校验常常带来挑战。修改深层嵌套数组数据后,校验规则可能无法及时响应更新,导致校验失效。本文分析此问题并提供解决方案。 问题源于Vue.js响应式系统在处理深层嵌套数组时的局限性。直接修改数…

    2025年12月22日
    000
  • 如何让图片在容器右下角完美对齐?

    轻松实现图片与容器右下角完美对齐 网页布局中,图片与容器精准对齐,特别是右下角对齐,常常是个挑战,尤其当图片尺寸不一或采用滑动展示(例如Swiper)时。本文提供一个简洁有效的解决方案。 问题: 如何在一个容器内,确保不同尺寸的图片右下角始终与容器右下角完美贴合? 解决方案: 关键在于巧妙运用CSS…

    2025年12月22日
    000
  • 按键码108代表哪个按键?

    按键码108的秘密:它也是回车键! 本文将揭秘按键码108的含义。你可能已经知道按键码13代表回车键(Enter),但108又是什么呢? 让我们来看一段代码片段: if (e.keyCode === 108 || e.keyCode === 13) { e.stopPropagation();} 这…

    2025年12月22日
    000
  • 哪里可以找到优秀的CSS效果案例?

    CodePen:你的CSS灵感宝库 想学习CSS,并寻找惊艳的CSS效果案例?那么你一定不能错过CodePen! CodePen是一个全球前端开发者汇聚的在线社区和作品展示平台。它拥有海量CSS案例,涵盖各种创意和技术,能让你大开眼界,并激发你的设计灵感,提升你的CSS技能。 CodePen的独特之…

    2025年12月22日
    000
  • 如何用ECharts绘制炫酷的发光3D图表?

    打造ECharts炫酷3D发光图表 本文将指导您使用echarts创建令人惊艳的3d发光图表,提升数据可视化的视觉冲击力。 要实现图例所示效果,标准echarts库并不足以胜任,我们需要借助其强大的webgl扩展库——echarts-gl。 echarts-gl基于WebGL技术,专为3D图表渲染而…

    2025年12月22日
    000
  • 为什么inline-block元素会出现错位现象?如何解决这个问题?

    inline-block元素错位难题及应对策略 网页布局中,inline-block元素的错位问题时有发生,给前端开发者带来不少困扰。本文将剖析此问题成因,并提供有效的解决方案。 问题现象 假设HTML结构如下,包含两个inline-block元素: 11223344 其他内容 CSS样式: spa…

    2025年12月22日
    000
  • 如何用CSS Flexbox实现高度比例为2:5:3的响应式布局?

    使用css flexbox创建高度比例为2:5:3的响应式布局 本文介绍如何利用CSS Flexbox实现一个高度比例始终保持2:5:3的响应式布局,并适应不同屏幕尺寸。 关键在于巧妙运用Flexbox的特性。 首先,我们将父容器设置为Flex布局,并指定垂直方向排列:display: flex; …

    2025年12月22日
    000
  • 如何增加input的高度并将文字定位在底部?

    巧妙调整input高度,让文字优雅地靠底部 网页开发中,常常需要微调表单元素样式,特别是调整input高度并使文本位于底部。本文将提供一种无需padding的灵活方案,实现这一效果。 需求说明 假设我们有一个input元素,需要设置较高的height值,但默认的垂直居中对齐方式并不符合需求,我们需要…

    2025年12月22日
    000
  • 浏览器上传大文件时,如何安全高效地获取本地文件路径?

    浏览器上传大文件:安全获取文件路径的挑战与解决方案 大型文件上传时,如何安全高效地获取本地文件路径,是许多开发者面临的难题。现代浏览器(如Chrome和Firefox)出于安全考虑,已禁用直接获取本地文件路径的API。本文将探讨解决这一问题的安全可靠方法。 直接获取本地文件路径存在严重安全风险,浏览…

    2025年12月22日
    000
  • HTML中emsp空格宽度不一致,如何可靠地实现文本缩进?

    html中的emsp空格宽度不一致问题及可靠的文本缩进解决方案 很多网页教程都提到emsp( )占据一个汉字的宽度,但实际情况并非如此。本文将深入分析这个问题,并提供更可靠的文本缩进方法。 问题:使用emsp实现文本缩进并不总是可靠。下例尝试使用emsp实现两个汉字宽度的缩进: 李飞 同志:   参…

    2025年12月22日 好文分享
    000
  • Gitee Pages静态网站部署失败:单个文件404错误如何排查和解决?

    gitee pages静态网站部署遇404?排查及解决方案 Gitee Pages静态网站部署过程中,404错误是常见问题。本文将针对单个文件404导致部署失败的情况,提供排查和解决方法。 问题:用户部署Gitee Pages静态网站时,出现404错误,提示单个文件缺失。但该文件实际存在于仓库中。 …

    2025年12月22日
    000
  • 如何使用正则表达式从HTML中提取”label_name”:”历史”并在JavaScript和PHP中实现输出?

    高效提取HTML数据:正则表达式应用详解 从冗长的HTML代码中提取特定信息是网页数据处理的常见任务。本文将详细讲解如何利用正则表达式精准提取HTML中的目标内容,并提供JavaScript和PHP代码示例,以解决从指定网址提取”label_name”:”历史” (其中“历史”为变量) 的问题。 正…

    2025年12月22日
    000
  • 如何实现带有45度曲线边框的分段器效果?

    打造45度曲线边框分段器:CSS与JavaScript的巧妙结合 在现代用户界面设计中,分段器是提升用户体验的关键导航元素,尤其在移动应用和响应式网站中。本文将演示如何创建一个带有45度角曲线边框的分段器,并通过点击按钮动态切换曲线方向。 这需要巧妙运用CSS的clip-path属性和JavaScr…

    2025年12月22日
    000
  • 如何使用CSS的clip-path属性实现分段器的45度曲线效果?

    优雅的45度角分段器:利用CSS clip-path打造流畅交互 如何让分段器在点击按钮时,右侧边框以45度角流畅地变为曲线,点击另一个按钮时又恢复原状?这不仅提升视觉吸引力,更能优化用户体验。本文将使用CSS的clip-path属性,结合path函数,完美实现这一效果。 以下代码示例演示了如何创建…

    2025年12月22日
    000
  • 不会Rust也能用Tauri开发桌面应用吗?

    tauri框架:rust语言熟练度对桌面应用开发的影响 Tauri凭借其轻量、高效的特性,成为备受青睐的桌面应用开发框架。但其核心基于Rust,这令部分开发者望而却步。那么,不懂Rust,能否胜任Tauri开发? 核心问题在于:对于缺乏Rust经验的开发者,使用Tauri会遇到哪些挑战?尤其在前端与…

    好文分享 2025年12月22日
    000

发表回复

登录后才能评论
关注微信