需求: 前端Tree组件数据源需要结构型数据
第一步,构造源数据
根据需求, 源数据格式为一维数组, 元素为字典数据, 字典包含的元素包括标题(title)、唯一标识(key)、父节点唯一标识(parent_key)、是否为叶子节点(leaf), 考虑到实际业务数据不同, 这里数据源的构造需要根据自己实际情况构造, 本文只提供示例数据…
arr = [
{'key': '0-0', 'title': '0-0', 'parent_key': '0', 'leaf': False},
{'key': '0-1', 'title': '0-1', 'parent_key': '0', 'leaf': False},
{'key': '0-0-0', 'title': '0-0-0', 'parent_key': '0-0', 'leaf': False},
{'key': '0-1-0', 'title': '0-1-0', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-1', 'title': '0-0-1', 'parent_key': '0-0', 'leaf': True},
{'key': '0-1-1', 'title': '0-1-1', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-0-0', 'title': '0-0-0-0', 'parent_key': '0-0-0', 'leaf': True}
]
第二步, 使用递归完成子节点装配, 获取树形结构数据
def arr2tree(source, parent):
tree = []
for item in source:
if item["parent_key"] == parent:
if not item['leaf']:
item["children"] = arr2tree(source, item["key"])
tree.append(item)
return tree
完整代码
import json
arr = [
{'key': '0-0', 'title': '0-0', 'parent_key': '0', 'leaf': False},
{'key': '0-1', 'title': '0-1', 'parent_key': '0', 'leaf': False},
{'key': '0-0-0', 'title': '0-0-0', 'parent_key': '0-0', 'leaf': False},
{'key': '0-1-0', 'title': '0-1-0', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-1', 'title': '0-0-1', 'parent_key': '0-0', 'leaf': True},
{'key': '0-1-1', 'title': '0-1-1', 'parent_key': '0-1', 'leaf': True},
{'key': '0-0-0-0', 'title': '0-0-0-0', 'parent_key': '0-0-0', 'leaf': True}
]
def arr2tree(source, parent):
tree = []
for item in source:
if item["parent_key"] == parent:
if not item['leaf']:
item["children"] = arr2tree(source, item["key"])
tree.append(item)
return tree
if __name__ == '__main__':
result = arr2tree(arr, '0')
print(json.dumps(result))