使用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'  
  }]
]

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

此贴终结,最终代码


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

第二个数据结构应为:


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


这明显就是要将以前的“散装列表”传参方式改成JSON传参方式。。。。这个有几个层级的数据就要进行几次遍历来做数据上下级对应关联。如果确定就是三个层级没有更多层级,那么还是可以考虑写个转换函数。
一旦有更多层级,那么建议就不要用这种列表参数了,初始传值直接就用JSON格式或XML格式得了。