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

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

省市区树结构扁平化转换

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

解决方案

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

定义一个函数getCheckedList,接受树形结构list、当前路径parentList和上级是否被选中parentChecked作为参数。初始化结果集result为空数组。

遍历list,对于每个节点:

计算当前节点的选中状态checked,如果上级被选中或当前被选中,则认为被选中。将当前节点的code添加到当前路径中,得到新的codeList。如果当前节点还有子节点,则递归调用getCheckedList,将codeList和checked向下传递。如果当前节点是叶子节点,且被选中,则将codeList添加到结果集中。返回结果集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" ],  /* 省略其他选中项 */]

登录后复制

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

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2805452.html

(0)
上一篇 2025年3月8日 22:06:40
下一篇 2025年2月22日 21:54:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论