文件夹扁平化路径命名与提取指定Item字段数组的技术问询
一、扁平化嵌套文件夹并生成路径式名称
要实现文件夹扁平化,同时将文件夹名称替换为从根到当前文件夹的路径格式,可通过递归遍历处理嵌套结构,记录每个文件夹的父路径,最终生成扁平化的文件夹列表。
以下是JavaScript实现代码:
function flattenFolders(rootFolder) { const result = []; // 递归遍历函数:处理当前文件夹,传入父路径前缀 function traverse(folder, parentPath = '') { // 生成当前文件夹的路径名称 const currentPath = parentPath ? `${parentPath}/${folder.name}` : folder.name; // 复制文件夹属性,清空嵌套文件夹,替换名称为路径 const flattenedFolder = { ...folder, name: currentPath, folders: [] }; result.push(flattenedFolder); // 递归处理子文件夹 if (folder.folders?.length) { folder.folders.forEach(subFolder => traverse(subFolder, currentPath)); } } // 遍历根目录下的子文件夹(根目录name为null,直接处理子级) rootFolder.folders.forEach(folder => traverse(folder)); return result; } // 调用示例 const originalData = /* 你的原始JSON数据 */; const flattenedFolders = flattenFolders(originalData); console.log(flattenedFolders);
执行后,文件夹的name会变为Testfolder/Subfolder、Testfolder/Subfolder/Interesting这类路径格式。
二、提取所有Item的指定属性
要提取所有层级(包括根目录)中item的id、folderId、text属性,同样通过递归遍历所有文件夹,收集符合要求的对象。
JavaScript实现代码:
function extractItems(rootFolder) { const result = []; // 递归遍历函数:处理当前文件夹的items及子文件夹 function traverse(folder) { // 收集当前文件夹的items if (folder.items?.length) { folder.items.forEach(item => { result.push({ id: item.id, folderId: item.folderId, text: item.text }); }); } // 递归处理子文件夹 if (folder.folders?.length) { folder.folders.forEach(subFolder => traverse(subFolder)); } } // 先收集根目录的items if (rootFolder.items?.length) { rootFolder.items.forEach(item => { result.push({ id: item.id, folderId: item.folderId, text: item.text }); }); } // 遍历所有子文件夹 traverse(rootFolder); return result; } // 调用示例 const originalData = /* 你的原始JSON数据 */; const extractedItems = extractItems(originalData); console.log(extractedItems);
执行后会得到目标格式的数组,每个元素仅包含指定的三个属性。
内容的提问来源于stack exchange,提问作者sufocator
相关产品推荐
相关产品推荐

