在JavaScript中,你可以通过递归的方式将平行数组(数组中的每个元素也是一个数组)转换为树状数据结构。以下是一个简单的示例,假设我们的平行数组具有id
和parentId
属性,我们可以通过以下方式将其转换为树状数据结构:
javascript复制代码
function arrayToTree(arr) {
const map = {}; // 创建一个映射对象,用于根据id查找节点
const tree = []; // 这个数组将包含转换后的树
// 首先,遍历输入数组,将每个节点放入映射对象中
arr.forEach(node => {
map[node.id] = { ...node, children: [] };
});
// 然后,再次遍历输入数组,将每个节点放入它的父节点的children数组中
arr.forEach(node => {
const parent = map[node.parentId];
if (parent) {
parent.children.push(map[node.id]);
} else {
// 如果父节点不存在,那么这个节点就是根节点
tree.push(map[node.id]);
}
});
return tree;
}
这个函数接受一个平行数组作为输入,然后返回一个树状数据结构。你可以像下面这样使用它:
javascript复制代码
const flat = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
{ id: 3, parentId: 1 },
{ id: 4, parentId: 2 },
{ id: 5, parentId: 3 }
];
const tree = arrayToTree(flat);
console.log(JSON.stringify(tree, null, 2));
这将输出以下树状数据结构:
json复制代码
[
{
"id": 1,
"parentId": null,
"children": [
{
"id": 2,
"parentId": 1,
"children": [
{
"id": 4,
"parentId": 2,
"children": []
}
]
},
{
"id": 3,
"parentId": 1,
"children": [
{
"id": 5,
"parentId": 3,
"children": []
}
]
}
]
}
]