如何将扁平化省市区树结构中的选中项进行扁平化转换?

如何将扁平化省市区树结构中的选中项进行扁平化转换?

扁平化省市区树结构中的选中项

在省市区树形结构中,需要对选中项进行扁平化转换。树形结构类似如下所示:

{  "code": "110000",  "value": "北京市",  "check": 1, // 选中标识  "children": [    {      "code": "110100",      "value": "北京市",      "check": null, // 未选中标识      "children": [        {          "code": "110101",          "value": "东城区",          "check": null // 未选中标识        },        {          "code": "110102",          "value": "西城区",          "check": null // 未选中标识        }      ]    }  ]}

扁平化后的结果需要满足如下要求:

如果一级选中,则记录一级、二级和三级code如果二级选中,则记录二级和三级code如果三级选中,则仅记录三级code

最终扁平化结果如下:

[  [110000, 110100, 110101],  [110000, 110100, 110102]]

实现扁平化的思路是进行递归遍历,将选中标识传递下去。代码如下:

/** * 获取所有被选中的code * @param {any[]} list 树形结构 * @param {string[]} parentList 到父级所有的code的数组 * @param {boolean} parentChecked 上级是否被选中,若上级被选中,则下面所有的子选项均是被选中的数据 */const getCheckedList = (list, parentList = [], parentChecked = false) => {  let result = [];  if (!Array.isArray(list)) {    return result;  }  list.forEach((item) => {    const checked = parentChecked || item.check; // 父级被选中或当前被选中,均认为是被选中    const codeList = parentList.concat(item.code);    if (item.children) {      // 当前不是最内层      result = result.concat(getCheckedList(item.children, codeList, checked));    } else {      // 已到最内层      if (checked) {        result.push(codeList);      }    }  });  return result;};

使用示例:

const tree = [  {    "code": "110000",    "value": "北京市",    "check": 1,    "children": [      {        "code": "110100",        "value": "北京市",        "check": null,        "children": [          {            "code": "110101",            "value": "东城区",            "check": null          },          {            "code": "110102",            "value": "西城区",            "check": null          }        ]      }    ]  },  {    "code": "130000",    "value": "河北省",    "check": null,    "children": [      {        "code": "130100",        "value": "石家庄市",        "check": "1",        "children": [          {            "code": "130102",            "value": "长安区",            "check": null          },          {            "code": "130104",            "value": "桥西区",            "check": null          }        ]      },      {        "code": "130200",        "value": "唐山市",        "check": null,        "children": [          {            "code": "130202",            "value": "路南区",            "check": null,          },          {            "code": "130203",            "value": "路北区",            "check": null,          }        ]      }    ]  },  {    "code": "150000",    "value": "内蒙古自治区",    "check": null,    "children": [      {        "code": "150100",        "value": "呼和浩特市",        "check": null,        "children": [          {            "code": "150102",            "value": "新城区",            "check": null          },          {            "code": "150103",            "value": "回民区",            "check": 1          }        ]      }    ]  }];console.log(getCheckedList(tree));  // [ [ '110000', '110100', '110101' ], [ '110000', '110100', '110102' ], [ '130000', '130100', '130102' ], [ '130000', '130100', '130104' ], [ '150000', '150100', '150103' ] ]

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月22日 03:17:50
下一篇 2025年12月22日 03:18:06

相关推荐

  • 如何将 Unicode 字符(例如 U+200F)插入字符串中?

    unicode 字符输入难题 要将 Unicode 字符(例如 U+200F)插入字符串中,可以通过以下步骤: 打开文本编辑器(如记事本):右键点击输入框并选择“插入 Unicode 控制字符”:在弹出的窗口中,找到并选中所需的 Unicode 字符(如 U+200F):复制字符并将其粘贴到要插入的…

    好文分享 2025年12月22日
    000
  • 如何将 Unicode 编码字符插入字符串?

    如何将 unicode 编码字符插入字符串 想将 U+200F 的 Unicode 编码字符插入字符串?操作步骤如下: 打开记事本右键 – 插入 Unicode 控制字符复制并粘贴 从列表中选择 U+200F 字符,然后复制。在你的文本编辑器(如 Visual Studio Code)中…

    2025年12月22日
    000
  • 如何在代码中插入 Unicode 代码字符?

    unicode 代码字符输入难题 在编写代码时,有时需要将 Unicode 代码字符插入字符串中。例如,您可能拥有 U+200F 的 Unicode 代码字符,并希望将其包括在字符串中。 如何完成此操作? 解决方案: 使用记事本将 Unicode 代码字符转换为控制字符: 打开记事本。右键单击并选择…

    2025年12月22日
    000
  • 如何利用正则表达式和 CSS 在 CodeMirror 中高亮日志字段?

    在 codemirror 中针对特定字符添加样式 在给定的场景中,需要针对通过正则表达式匹配到的日志字段添加样式。通过 JavaScript 中的正则表达式和 CSS,可以轻松实现此功能。 步骤: 使用正则表达式匹配日志内容: const regex = /User (w+) logged in/;…

    2025年12月22日
    000
  • 垂直外边距合并:它是如何工作的,以及如何避免它?

    垂直外边距合并:其含义及其情况 垂直外边距合并是指当两个相邻的块元素或浮动元素拥有非零的外边距时,它们的外边距会合并,形成一个更大的外边距。 合并后的情况 垂直外边距合并后的情况有多种,具体取决于元素的类型和所设置的样式: 相邻的块元素:合并后,顶部的块元素会拥有合并后的外边距,底部的块元素不拥有外…

    2025年12月22日
    000
  • HTML 中相邻元素垂直外边距如何合并?

    认识垂直外边距合并 对于 HTML 中排列相邻的块级元素,其垂直外边距可能会合并,形成单一的较大外边距。这种现象被称为垂直外边距合并。 垂直外边距合并后,会根据元素的类型和上下文环境产生不同的情况: 相邻元素同类型:相邻块级元素的外边距仅合并 top 或 bottom 边距之一。例如,两个块级元素的…

    2025年12月22日
    000
  • 垂直外边距合并:如何避免意外的布局变化?

    垂直外边距合并简介 垂直外边距合并是指当两个相邻元素具有垂直方向的外边距时,浏览器会将它们合并为单个外边距的最大宽度。这个过程可以简化页面布局,但有时也会产生意想不到的结果。 合并后的情况 相同方向的外边距合并:相邻元素在相同方向具有相等的外边距时,将合并为最大外边距。相反方向的外边距合并:相邻元素…

    2025年12月22日
    000
  • 如何在 EChart 折线图中设置多种 MarkPoint?

    如何在 echart 中设置多种 markpoint 在 EChart 折线图中,可以使用 MarkPoint 来突出显示数据中的关键点。通常,为了区分不同类型的 MarkPoint,我们需要为其设置不同的样式和含义。 解决方法 要定义多种 MarkPoint,可以使用 markPoint.data…

    2025年12月22日
    000
  • 透明父盒子内如何垂直居中子盒子?

    如何让 css 中透明父盒子内的子盒子垂直居中? 在 CSS 中,当你有一个包含文本的父盒子并希望让其中的子盒子垂直居中时,可能会遇到以下挑战: 问题:如果给父盒子设置透明度(例如 opacity: 0.2),那么子盒子也会变得透明。如何防止这种情况,同时实现垂直居中效果? 答案: 子元素/* 父元…

    2025年12月22日
    000
  • 如何在 ECharts 折线图中定义多种 MarkPoint?

    在 echarts 中定义多种 markpoint MarkPoint 是一种图表元素,用于突出显示图表中的特定点。在一个折线图中,您可以定义不同种类的 MarkPoint,以便为不同的意义提供视觉线索。 要定义多个 MarkPoint,可以使用 markPoint.data 选项。此选项允许您指定…

    2025年12月22日
    000
  • JavaScript 中 keyCode 108 代表什么键?

    keycode 108 的含义 在 JavaScript 中,键盘事件对象提供了 keyCode 属性,用于标识按下键盘时触发的事件代码。在问题中提供的代码片段中,e.keyCode === 108 用于检测回车键被按下。 那么,keyCode 108 具体表示什么呢? 答案是:数字小键盘上的回车键…

    2025年12月22日
    000
  • JavaScript 中的 e.keyCode === 108 代表什么?如何区分主回车键和数字小键盘回车键?

    关于 keycode 108 的意义 在 JavaScript 代码中,我们经常会使用 e.keyCode 来判断用户按下的是哪个键盘按键。此处代码中,e.keyCode === 13 表示按下回车键,但 e.keyCode === 108 也同样代表回车键。 背后的原因: 键盘上通常有两个回车键,…

    2025年12月22日
    000
  • 父元素透明时,如何让子元素垂直居中?

    父元素透明时,如何让子元素垂直居中? 有时,我们会遇到这样的情况:父元素透明度设为较低但不为0,而父元素中包含一个子元素,我们希望子元素垂直居中。然而,使用传统的定位方法,子元素的定位会受到父元素透明度的影响,导致无法垂直居中。 为了解决这个问题,我们可以采用以下方法: 1. 为子元素添加绝对定位 …

    2025年12月22日
    000
  • 如何使用 ECharts 的 MarkPoint 定义不同类型的数据标记?

    如何在 echarts 中定义各种 markpoint 在ECharts中,MarkPoint用于在图表中强调特定数据点或值。一个折线图中可以设置多种类型的MarkPoint,以表示不同的含义或重要性程度。 要自定义标记点,可以使用 markPoint.data 选项。它是一个数组,其中每个元素表示…

    2025年12月22日
    000
  • 如何通过递归算法提取跨级选中的节点代码?

    跨级选中节点代码提取 针对省市区结构扁平化提取选中的代码,我们需要进行递归处理。 关键步骤在于传递选中的状态。递归时,如果上层节点选中,则下层所有子节点都视为选中状态。 /** * 获取所有被选中的代码 * @param {any[]} list 树形结构 * @param {string[]} p…

    2025年12月22日
    000
  • 如何在HTML中使用data-callback获取令牌?

    js中的callback的使用方式 你在HTML中设置了data-callback属性,其值是javascriptCallback。根据callback的含义,它应该是一个函数的名称,并且通常处于全局作用域(即window对象下)。 为了获取data-callback返回的令牌,你可以执行以下步骤:…

    2025年12月22日
    000
  • 键盘上的 108 Keycode 代表什么?

    键盘上的 108 keycode 代表什么? 在 JavaScript 代码示例中: if (e.keyCode === 108 || e.keyCode === 13) { e.stopPropagation();} 其中,13 表示回车键,而 108 表示的是键盘上的数字小键盘回车键。 键盘上的…

    2025年12月22日
    000
  • 如何将省市区树形结构转换成扁平化结构?

    如何将省市区树形结构转换成扁平化结构? 我们有一个树形数据结构,表示省市区之间的关系,其中: 每个节点代表一个行政区域。如果一个节点有子节点,则表示该行政区域下有下级行政区域。如果一个节点没有子节点,则表示该行政区域为最底层行政区域。 现在,我们需要将这个树形结构转换成扁平化结构。扁平化结构是一个数…

    2025年12月22日
    000
  • 如何获取上传文件的本地机器路径?

    如何在上传文件时获取文件在本地机器上的实际路径 在上传文件时,出于安全考虑,浏览器通常不会提供文件在本地机器上的实际路径。然而,对于某些特殊需求,例如当用户需要在特定机器上选择文件,而后台服务部署在同一台机器上时,直接获取文件路径便变得非常重要。 解决方案 由于浏览器自身不支持此功能,因此纯靠浏览器…

    2025年12月22日
    000
  • 如何使用Echarts自定义多类型MarkPoint?

    echarts中自定义多类型markpoint 在Echarts折线图中,想要为不同的MarkPoint赋予不同的含义,可以使用markPoint.data进行自定义。 option = { … series: [{ markPoint: { data: [ { symbol: ‘circle’…

    2025年12月22日
    000

发表回复

登录后才能评论
关注微信