关于js处理树形数据问题

js树形结构数据处理

[
    "/DD层/信宝",
   "/DD层/信宝/数据源1", 
  "/DD层/信宝/数据源1/数据源2",
"/DD层/信宝/数据源1/数据源3",
  "/DD层/信宝/数据源2",
    "/SS层/共享库",
    "/SS层/OA系统",
    "/DM层/主体系统1",
    "/SS层/产权系统",
    "/DM层/基金系统1",
    "/SS层/企业系统1",
    "/DM层/项目系统",
    "/DM层/企业系统"
]
要处理成下面这样子的树形结构
[
{
title:'DD层',
key:'DD层',
children:[
{
title:'信宝',
key:'信宝',
children:[
{title:'数据源1',key:'数据源1',children:[{title:'数据源2',key:'数据源2',children:[]},{title:'数据源3',key:'数据源3',children:[]}]}.
{title:'数据源2',key:'数据源2',children:[]}.
]
}
]
}
]

后端返回的数据实在是复杂 能不能这样把普通结构的数据改成树形结构呀 不知道怎么处理啊 还要考虑到 是否存在上一层相同的

const data = [
  "/DD层/信宝",
 "/DD层/信宝/数据源1", 
"/DD层/信宝/数据源1/数据源2",
"/DD层/信宝/数据源1/数据源3",
"/DD层/信宝/数据源2",
  "/SS层/共享库",
  "/SS层/OA系统",
  "/DM层/主体系统1",
  "/SS层/产权系统",
  "/DM层/基金系统1",
  "/SS层/企业系统1",
  "/DM层/项目系统",
  "/DM层/企业系统"
]

function toTreeData(data) {
  const res = [], tokens = new Map()
  const generateTreeData = (res, tokens) => {
    for (const [key, value] of tokens.entries()) {
      const data = {
        title: key,
        key,
        children: []
      }
      res.push(data)
      generateTreeData(data.children, value)
    }
  }
  for (const item of data) {
    let levelTokens = tokens
    item.split('/').slice(1).forEach(token => {
      if (!levelTokens.has(token)) {
        levelTokens.set(token, new Map())
      }
      levelTokens = levelTokens.get(token)
    })
  }
  generateTreeData(res, tokens)
  return res
}

toTreeData(data)