我陷入了困境,我需要你的帮助。我在 JavaScript 中有一个带有随机字符串的数组,任务是制作一个打乱的树,其中每个父级都有 3 个子级,这 3 个子级有 9 个子级(每个上级子级有 3 个子级)。例如,我有一个数组:
const x = [
'apple', 'bus', 'banana', 'pen', 'pencil', 'earth', 'planet', 'flat',
'house', 'dream', 'train', 'space', 'drink', 'cola'
];
代码应该生成如下内容:
[
{
parent: 'apple',
children: [
{
parent: 'pen',
children: [
{
parent: 'drink',
children: []
},
]
},
{
parent: 'planet',
children: []
},
{
parent: 'dream',
children: []
},
]
},
{
parent: 'bus',
children: [
{
parent: 'pencil',
children: [
{
parent: 'cola',
children: []
},
]
},
{
parent: 'flat',
children: []
},
{
parent: 'train',
children: []
},
]
},
{
parent: 'banana',
children: [
{
parent: 'earth',
children: []
},
{
parent: 'house',
children: []
},
{
parent: 'space',
children: []
},
]
}
]
因此,在所有父母中的最后一个级别未填充之前,不应填充更深的级别。请帮忙!
我尝试创建一些递归函数,但它太大而且不是真正自动化,所以我认为有更好、更简单的方法来实现这个,我需要一些专家的帮助...
我可以帮助你。 嗯,实际上这有点像算法测试。试试这个。
const x = [
'apple', 'bus', 'banana', 'pen', 'pencil', 'earth', 'planet', 'flat',
'house', 'dream', 'train', 'space', 'drink', 'cola'
];
function generateTree(level, startIndex, count) {
const tempIndex = 3 * (startIndex + 1)
if (x.length >= count) {
const children = x.slice(tempIndex, tempIndex + 3).map((item, index) => {
return {
parent: item,
children: generateTree(
level + 1,
tempIndex + index,
count + Math.pow(3, level)
),
}
})
return children
} else {
return []
}
}
console.log(generateTree(1, -1, 0))