RT_wqt 2022-02-15 16:14 采纳率: 100%
浏览 52
已结题

使用javascript解决开发中的数据转换问题

// ['1600639146', '文件夹1', '新建文件夹' ]表示1600639146文件夹下有一个文件夹1,文件夹1下有一个新建文件夹
[
  [ '1600639146', '文件夹1', '新建文件夹' ],
  [ '1600639146', '文件夹1' ],
  [ '1600639146', '文件夹3' ],
  [ '1600639146', '文件夹2' ]
]

转换为

[
  label: '1600639146',
  children: [
  {
    label: '文件夹1',
    children: [{
      label: '新建文件夹'
    }]
  }, {
    label: '文件夹2'  
  }, {
    label: '文件夹3'  
  }]
]

由于项目需要,需要实现以上这个结果,请算法朋友解答一下。

  • 写回答

3条回答 默认 最新

  • RT_wqt 2022-02-15 19:49
    关注

    此贴终结,最终代码

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script>
        const result = [
          ['1600639146', '文件夹1'],
          [ '1600639146', '文件夹1', '新建文件夹' ],
          [ '1600639146', '文件夹1', '新建文件夹', '文件夹' ],
          [ '1600639146', '文件夹3' ],
          ['1600639146', '文件夹2', '新文件夹', '文件夹', 'folder'],
          ['1600639146', '文件夹2'],
          ['1600639146', '文件夹2', '新文件夹'],
          ['1600639146', '文件夹2', '新文件夹', '文件夹']
        ]
    
        function solve(arr) {
          let rootStr = null
          arr.forEach(folderPath => {
            rootStr = folderPath.shift()
          })
          arr = arr.sort((x, y) => {
            return x.length - y.length
          })
          const rootNode = { label: rootStr }
          arr.forEach(folderPath => {
            onTree(rootNode, folderPath)
          })
          console.log('rootNode', rootNode)
        }
    
        function onTree(node, path) {
          const root = node
          for (let i = 0; i < path.length - 1; i++) {
            node = node.children.find(item => item.label === path[i])
          }
          if (node.children) {
            node.children.push({
              label: path[path.length - 1]
            })
          } else {
            node.children = [{
              label: path[path.length - 1]
            }]
          }
        }
    
        solve(result)
      </script>
    </body>
    </html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 请采纳用户回复 2月16日
  • 创建了问题 2月15日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上