【发布时间】:2019-05-17 04:38:03
【问题描述】:
所以我正在尝试编写一个递归函数,该函数将对象的平面数组及其值、id 和父节点的 id 转换为树结构,其中结构的子节点是一个数组的节点。子节点需要按id排序,如果null可以是根节点。
我试图编写函数 toTree(data) 的函数,应该只接受数据数组。没有父母,我无法做到这一点。到目前为止,我有一个函数(如下),它需要数据和父级才能开始。
输入:
const tasks = [
{ id: 1, parent: null, value: 'Make breakfast' },
{ id: 2, parent: 1, value: 'Brew coffee' },
{ id: 3, parent: 2, value: 'Boil water' },
{ id: 4, parent: 2, value: 'Grind coffee beans' },
{ id: 5, parent: 2, value: 'Pour water over coffee grounds' }
];
输出:
{
id: 1,
parent: null,
value: 'Make Breakfast',
children: [
{
id: 2,
parent: 1,
value: 'Brew coffee',
children: [
{ id: 3, parent: 2, value: 'Boil water' },
{ id: 4, parent: 2, value: 'Grind coffee beans' },
{ id: 5, parent: 2, value: 'Pour water over coffee grounds' }
]
}
]
}
funciton toTree(data) {
customtoTree (data, null);
}
function customToTree (data, parent) {
const out = [];
data.forEach((obj) => {
if (obj.parent === parent) {
const children = customToTree(data,obj.parent);
if (children.length) {
obj[children[0]] = children;
}
const {id,parent, ...content} = obj;
out.push(content);
}
});
return out;
}
我真的很想了解如何做到这一点的正确逻辑,并考虑这个问题以及如何在不明确给出父母的情况下做到这一点。
【问题讨论】:
-
子节点的父节点是否总是先列在平面数组中,在子节点之前?
标签: javascript tree