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)