如何将省市区树结构扁平化为选中节点的代码数组?

心靈之曲
发布: 2024-11-04 17:45:12
原创
1178人浏览过

如何将省市区树结构扁平化为选中节点的代码数组?

省市区树结构扁平化转换

给了省市区的树状结构,只有选中节点的check为1,其他都为null。我们需要做的就是扁平化数据结构,把所有被选中的省、市、区代码放到一个数组中。

解决方案

思路是递归遍历树结构,将选中状态向下传递。具体步骤如下:

  1. 定义一个函数getCheckedList,接受树形结构list、当前路径parentList和上级是否被选中parentChecked作为参数。
  2. 初始化结果集result为空数组。
  3. 遍历list,对于每个节点:

    Softr Studio
    Softr Studio

    最简单的无代码web开发平台

    Softr Studio 55
    查看详情 Softr Studio
    • 计算当前节点的选中状态checked,如果上级被选中或当前被选中,则认为被选中。
    • 将当前节点的code添加到当前路径中,得到新的codeList。
    • 如果当前节点还有子节点,则递归调用getCheckedList,将codeList和checked向下传递。
    • 如果当前节点是叶子节点,且被选中,则将codeList添加到结果集中。
  4. 返回结果集result。

代码示例

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": "西城区",
            "checked": null
          }
        ]
      }
    ]
  },
  /* 省略其他省市区 */
];

const result = getCheckedList(tree);
console.log(result);
登录后复制

结果:

[
  [ "110000", "110100", "110101" ],
  [ "110000", "110100", "110102" ],
  /* 省略其他选中项 */
]
登录后复制

以上就是如何将省市区树结构扁平化为选中节点的代码数组?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号