在 JavaScript 中从数组创建随机树

问题描述 投票:0回答:1

我陷入了困境,我需要你的帮助。我在 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: []
      },
    ]
  }
]

因此,在所有父母中的最后一个级别未填充之前,不应填充更深的级别。请帮忙!

我尝试创建一些递归函数,但它太大而且不是真正自动化,所以我认为有更好、更简单的方法来实现这个,我需要一些专家的帮助...

javascript arrays tree
1个回答
0
投票

我可以帮助你。 嗯,实际上这有点像算法测试。试试这个。

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))

© www.soinside.com 2019 - 2024. All rights reserved.