每日一题:平地起高楼
平地起高楼
介绍
我们的国家国土面积十分的广阔,目前中国有 34 个省级行政区,包括 23 个省、5 个自治区、4 个直辖市、2 个特别行政区。其下面还有几千个县级区域,以及更多的乡镇区域。
这样层层嵌套的省市区数据在实际开发中是如何处理的呢?下面请运用所学,解开这个谜团吧~
准备
本题已经内置了初始代码,打开实验环境,目录结构如下:
1 | ├── convert-to-tree.js |
其中:
index.html是主页面。convert-to-tree.js是需要补充代码的 js 文件。
目标
在实际开发中,由于省市区等层级较多,使得数据结构按照嵌套关系来存储则过于复杂,一般在数据库中会将省市区数据解耦,每条信息以并列关系存储在一张表中,结构如下:
1 | [ |
各级行政区域通过 pid 关联起来。
但是这样平铺的数据放在前端页面展示的话,用户很难看出其中的层级关系,所以需要将平铺的结构转化为树状结构,便于前端展示:
1 | [ |
补充文件 convert-to-tree.js 中的 convertToTree 工具函数,使其实现我们需要的功能:

- 接收平铺的区域信息数组,并将其转化为树状结构,最终数据结构如上面介绍中所示(树状结构,且对于没有子集的叶子节点,其 children 属性设置为空数组)。
- 并且还接收一个
rootId,用于标识返回哪一个区域下面的所有节点。默认为0表示返回所有省份信息(在我们的示例数据中,所有省份的pid都为0)。
完成后,最终页面效果如下:

规定
- 题目使用 JavaScript 完成,不得使用第三方库。
- 只能在
convert-to-tree.js中指定区域答题,不能修改index.html中的任何代码。 - 请不要修改环境自动生成的
convert-to-tree.js以及index.html文件的文件路径以及文件名。 - 检测时使用的输入数据与题目中给出的示例数据可能是不同的。考生的程序必须是通用的,不能只对需求中给定的数据有效。
- 满足题目需求后,点击「提交检测」系统会自动判分。
判分标准
- 本题完全实现题目目标得满分,否则得 0 分。
总通过次数: 833 | 总提交次数: 881 | 通过率: 94.6%
难度: 困难 标签: 2022, 省模拟赛, Web 前端, JavaScript
题解
1 | function convertToTree(regions, rootId = "0") { |
1 | let resArr=[] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 江月迟迟!
