返回
用代码梳理:一维数组转树形数组
前端
2024-01-03 23:20:11
当我们使用一维数组来表示数据时,数据之间的关系通常是线性的。然而,在许多情况下,数据之间的关系并不是线性的,而是具有树状结构。树形结构是一种层次化的数据结构,它可以很好地表示数据之间的父子关系。
一维数组转树形数组的算法有很多种,最常见的一种算法是递归算法。递归算法是一种自顶向下的算法,它通过不断地将问题分解成更小的子问题来解决问题。在将一维数组转树形数组的场景中,我们可以通过以下步骤来实现:
- 定义一个函数,该函数接收两个参数:一个一维数组和一个父节点ID。
- 在函数中,遍历一维数组中的所有元素。
- 对于每个元素,如果该元素的父节点ID与函数的第二个参数相同,则将该元素添加到该父节点的子节点列表中。
- 继续遍历一维数组,直到所有元素都被处理完毕。
- 返回树形数组。
下面是一个使用递归算法实现的一维数组转树形数组的示例:
function arrayToTree(arr, pid) {
const result = [];
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (item.pid === pid) {
const children = arrayToTree(arr, item.id);
item.children = children;
result.push(item);
}
}
return result;
}
const arr = [
{ id: 1, pid: 0, title: '首页' },
{ id: 2, pid: 1, title: '订单列表' },
{ id: 3, pid: 1, title: '商品列表' },
{ id: 4, pid: 2, title: '订单详情' },
{ id: 5, pid: 3, title: '商品详情' },
];
const tree = arrayToTree(arr, 0);
console.log(tree);
输出结果如下:
[
{
id: 1,
pid: 0,
title: '首页',
children: [
{
id: 2,
pid: 1,
title: '订单列表',
children: [
{
id: 4,
pid: 2,
title: '订单详情'
}
]
},
{
id: 3,
pid: 1,
title: '商品列表',
children: [
{
id: 5,
pid: 3,
title: '商品详情'
}
]
}
]
}
]
通过上面的示例,我们可以看到,使用递归算法可以很容易地将一维数组转树形数组。
除了递归算法之外,还有很多其他算法可以实现一维数组转树形数组。例如,我们可以使用广度优先搜索算法或深度优先搜索算法来实现。