uni-app 使用查询树形数据gettree时 查询出来的数据不是树形结构
uni-app 使用查询树形数据gettree时 查询出来的数据不是树形结构
操作步骤:
查询使用 getTree: true时,查询出来的数据不是树形结构。
预期结果:
"data": [{
"_id": "66f4dde0816a3ffb2d6403ca",
"name": "内科",
"code": "100",
"parent_code": "",
"intro": "内科方面的综合科室",
"order": 1
"children": [{
"_id": "66f4ddfb466d41e2fab72492",
"name": "呼吸内科",
"code": "101",
"parent_code": "100",
"intro": "呼吸内科方面的综合科室",
"order": 1
}]
}]
实际结果:
{
"affectedDocs": 2,
"data": [
{
"_id": "66f4dde0816a3ffb2d6403ca",
"name": "内科",
"code": "100",
"parent_code": "",
"intro": "内科方面的综合科室",
"order": 1
},
{
"_id": "66f4ddfb466d41e2fab72492",
"name": "呼吸内科",
"code": "101",
"parent_code": "100",
"intro": "呼吸内科方面的综合科室",
"order": 1
}
]
}
## bug描述:
使用查询树形数据gettree时,查询出来的数据不是树形结构。科室表的schema定义反复看了没问题,云对象查询方法也没问题
![Image 1](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20240926/34546cb5b26a9280545c64f9b17ce670.png)
![Image 2](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20240926/efbca87055b088237c90c381cb5cbe72.jpg)
![Image 3](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20240926/745a3dd5f7280646d6f30618c900b05a.jpg)
1 回复
在使用uni-app处理树形数据时,如果你通过gettree
方法查询出来的数据不是树形结构,通常意味着你需要在前端进行数据转换。下面是一个简单的示例,展示如何将扁平结构的数据转换为树形结构。
假设你有一个扁平的数组结构,每个节点都有一个唯一的id
和一个表示其父节点的parentId
。以下代码将展示如何将这些数据转换为树形结构。
// 示例数据
const flatData = [
{ id: 1, parentId: null, name: 'Root 1' },
{ id: 2, parentId: 1, name: 'Child 1-1' },
{ id: 3, parentId: 1, name: 'Child 1-2' },
{ id: 4, parentId: 2, name: 'Grandchild 1-1-1' },
{ id: 5, parentId: null, name: 'Root 2' },
{ id: 6, parentId: 5, name: 'Child 2-1' }
];
// 转换函数
function buildTree(data, parentId = null) {
return data
.filter(item => item.parentId === parentId)
.map(item => ({
...item,
children: buildTree(data, item.id)
}));
}
// 使用转换函数
const treeData = buildTree(flatData);
// 输出树形结构
console.log(JSON.stringify(treeData, null, 2));
在上面的代码中:
flatData
是你的原始扁平数据结构。buildTree
函数递归地将数据转换为树形结构。它接受两个参数:data
是全部数据,parentId
是当前节点的父节点ID(默认为null
,表示根节点)。- 在
buildTree
函数内部,首先使用filter
方法筛选出所有父节点ID等于当前parentId
的项,然后对每个项使用map
方法创建一个新对象,该对象包含当前项及其子节点(通过递归调用buildTree
获得)。 - 最后,调用
buildTree
函数并传入原始数据,得到转换后的树形结构treeData
。
这种方法适用于大多数需要将扁平数据转换为树形结构的场景。如果你的gettree
方法返回的数据格式略有不同,你可能需要调整buildTree
函数中的筛选和映射逻辑。不过,核心思想是利用递归构建树形结构,这是处理此类问题的通用方法。