有一份这样的数据:
let list = [
{
"fileVo": [
{
"fileName": "2021-11-13-10-01-44_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44",
"updateTime": 1611565885
},
{
"fileName": "2021-11-13-10-01-44_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44",
"updateTime": 1611565891
}
],
"folder": "/web/tar/oriFiles/2021-11-13-10-01-44",
"folderVos": [
{
"fileVo": [
{
"fileName": "2021-01-20-12-03-55_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44/solo",
"updateTime": 1611126523
},
{
"fileName": "2021-01-20-12-03-55_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44/solo",
"updateTime": 1611132876
}
],
"folder": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"folderVos": []
}
]
},
{
"fileVo": [
{
"fileName": "2021-01-20-12-03-35_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35",
"updateTime": 1611565902
},
{
"fileName": "2021-01-20-12-03-35_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35",
"updateTime": 1611565907
}
],
"folder": "/web/tar/oriFiles/2021-01-20-12-03-35",
"folderVos": [
{
"fileVo": [
{
"fileName": "2021-01-20-12-03-55_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"updateTime": 1611126523
},
{
"fileName": "2021-01-20-12-03-55_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"updateTime": 1611132876
}
],
"folder": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"folderVos": []
}
]
},
{
"fileVo": [],
"folder": "/web/tar/oriFiles/fitlyidd",
"folderVos": []
}
]
想生成树形结构的数据格式,如下:
[
{
"fileName": "/web/tar/oriFiles/2021-11-13-10-01-44",
"children": [
{
"fileName": "2021-11-13-10-01-44_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44",
"updateTime": 1611565885
},
{
"fileName": "2021-11-13-10-01-44_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44",
"updateTime": 1611565891
},
{
"fileName": "/web/tar/oriFiles/2021-11-13-10-01-44/solo",
"children": [
{
"fileName": "2021-01-20-12-03-55_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44/solo",
"updateTime": 1611126523
},
{
"fileName": "2021-01-20-12-03-55_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-11-13-10-01-44/solo",
"updateTime": 1611132876
}
]
}
]
},
{
"fileName": "/web/tar/oriFiles/2021-01-20-12-03-35",
"children": [
{
"fileName": "2021-01-20-12-03-35_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35",
"updateTime": 1611565902
},
{
"fileName": "2021-01-20-12-03-35_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35",
"updateTime": 1611565907
},
{
"fileName": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"children": [
{
"fileName": "2021-01-20-12-03-55_camera.csd",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"updateTime": 1611126523
},
{
"fileName": "2021-01-20-12-03-55_Cam1.mp4",
"parentDir": "/web/tar/oriFiles/2021-01-20-12-03-35/solo",
"updateTime": 1611132876
}
]
}
]
},
{
"fileName": "/web/tar/oriFiles/fitlyidd",
"children": []
}
]
目前编写的代码只实现了2级,以后可能会有更深的层级,想写成将此方法写成递归,请求指教,谢谢。
function handleData(list) {
let result = list.map(item => {
let fileData = {
fileName: item.folder,
children: []
}
item.fileVo.forEach(file => {
fileData.children.push(file)
})
// 如果folderVos有值生成
if (item.folderVos && item.folderVos.length > 0) {
let r = item.folderVos.map(childrenItem => {
let childrenData = {
fileName: childrenItem.folder,
children: []
}
childrenItem.fileVo.forEach(file1 => {
childrenData.children.push(file1)
})
return childrenData
})
fileData.children.push(...r)
}
return fileData
});
console.log(result)
}
handleData(list);
###function getTree(list,result){
for(let i=0;i<list.length;i++){
let item = {
fileName:list[i].folder || list[i].fileName,
children:list[i].fileVo ? getTree(list[i].fileVo,[]) : undefined,
parentDir:list[i].parentDir,
updateTime:list[i].updateTime
};
for(let key in item){
if(item[key] === undefined){
delete item[key];
}
}
result.push(item)
}
return result;
}
###function transFolders(folders) {
function folderToNode(folder) {
const { folder: fileName, fileVo, folderVos } = folder;
const children = (fileVo || []).concat((folderVos || []).map(folderToNode));
return {
fileName,
children
}
}
return folders.map(folderToNode);
}
// TEST
transFolders(list);
###function map(list) {
return list.map(v => ({
fileName: v.folder||v.fileName,
parentDir: v.parentDir||null,
children: Array.isArray(v.fileVo) ? map(v.fileVo) : []
}))
}
###谢谢 @手机用户2117 提供的思路
function getTree(list, result) {
for (let i = 0; i < list.length; i++) {
let item = {
fileName: list[i].folder || list[i].fileName,
children: list[i].fileVo,
};
if (list[i].folderVos && list[i].folderVos.length > 0) {
item.children.push(...getTree(list[i].folderVos, []))
}
result.push(item)
}
return result;
}
console.log(getTree(list, []))