You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:23:23