希望通过源数据结构转换成目标树形结构,直接从人的角度可以拼出结果,但如何通过代码实现转换?请大家帮忙,谢谢!
最终需要实现的语言 JS,其他语言也可以提供下代码思路
目标表格
源数据结构
1. 数据 (表格原始数据)
[
["报表测试","","","","","1"],
["单元格", "","跨行合并","指标列","","2"],
["statis_date","公司","","太原","福州","4"]
]
2. 关系 (表示单元格的合并行和列的情况)
[
{ col: 0, colspan: 5, row: 0, rowspan: 1 },
{ col: 0, colspan: 2, row: 1, rowspan: 1 },
{ col: 2, colspan: 1, row: 1, rowspan: 2 },
{ col: 3, colspan: 2, row: 1, rowspan: 1 },
]
3.说明
- 关系中
col
代表列序号
,row
代表行序号
,colspan
代表跨列数
,rowspan
代表跨行数
- 合并不能仅依靠空数据就合并,需要根据关系进行定位合并的位置,空可能也会单独单元格显示
- 存在一条默认的关系即,没有在关系中标识的单元格的关系即为
colspan 1 rowspan 1
目标数据结构
目标数据中
层级 表示 行
,子元素表示下面的列内容
需要实现行合并和列合并
[
{
"label": "报表测试",
"children": [
{
"label": "单元格",
"children": [
{
"label": "statis_date",
"children": []
},
{
"label": "公司",
"children": []
}
]
},
{
"label": "跨行合并",
"children": []
},
{
"label": "指标列",
"children": [
{
"label": "太原",
"children": []
},
{
"label": "福州",
"children": []
}
]
}
]
},
{
"label": "1",
"children": [
{
"label": "2",
"children": [
{
"label": "4",
"children": []
}
]
}
]
}
]
谢邀,直接 DFS 遍历一遍即可。当然,你的数据能生成树的前提是每个项的中间不会对应上一行某个项的开始。