省市区树结构扁平化转换
给了省市区的树状结构,只有选中节点的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