JS中While循环获取文件夹路径时内存溢出问题求助
修复JavaScript文件夹路径获取的内存溢出问题
问题原因
你的代码触发内存溢出是因为无限循环:
- 在
while循环里,你执行了currentFolder = currentFolder.parentFolder.uniqueid,这会把currentFolder从文件夹对象变成字符串类型的uniqueid。 - 下一次循环时,
currentFolder.uniqueid会变成undefined,永远不等于根文件夹的uniqueid('1'),导致循环永远无法终止,最终耗尽内存。
修复后的代码
const template = [ {title: 'template 1', parentFolder:'', uniqueid: '1'}, {title: 'template 2-2', parentFolder:'', uniqueid: '22'}, {title: 'template 2-2', parentFolder:'', uniqueid: '222'}, {title: 'template 2-2-1', parentFolder:'', uniqueid: '333'}, ]; template[0].parentFolder = template[0]; template[1].parentFolder = template[0]; template[2].parentFolder = template[0]; template[3].parentFolder = template[1]; function getFoldersPath(currentFolder) { const previousParents = []; // 循环直到当前文件夹是根文件夹 while (currentFolder.uniqueid !== template[0].uniqueid) { previousParents.push(currentFolder.uniqueid); // 赋值为父文件夹对象,而非父文件夹的uniqueid currentFolder = currentFolder.parentFolder; } // 加入根文件夹的id,保证路径完整 previousParents.push(currentFolder.uniqueid); // 反转得到从根到子的路径(不需要的话可删除此句) return previousParents.reverse(); } var result = getFoldersPath(template[3]) console.log(result) // 输出: ["1", "22", "333"]
关键修复点
- 将
currentFolder = currentFolder.parentFolder.uniqueid改为currentFolder = currentFolder.parentFolder,确保currentFolder始终是文件夹对象,能正常访问parentFolder和uniqueid属性。 - 循环结束后手动添加根文件夹的
uniqueid,避免路径缺失。 - 可选:用
reverse()将路径调整为从根到子的顺序,若需要子到父的顺序可直接删除该语句。
内容的提问来源于stack exchange,提问作者aleksou
相关产品推荐
相关产品推荐

