代码之家  ›  专栏  ›  技术社区  ›  Zvonimir Rudinski

从阵列中删除父目录

  •  1
  • Zvonimir Rudinski  · 技术社区  · 6 年前


    假设我有这样一个文件夹结构:

      • 文件夹1
        • 文件夹4
      • 文件夹2
        • 文件夹3
          • 文件夹5
      • 文件夹6

    我得到了一个包含所有路径的数组:

    let paths = ['/root/','/root/folder1/','/root/folder2','/root/folder2/folder3'...
    

    我想完成的是递归删除具有子目录的父目录,因此我最终会得到以下结果:

    let paths = ['/root/folder1/folder4','/root/folder2/folder3/folder5','/root/folder6'];
    

    别担心,这不是为了家庭作业或其他什么,只是我被困在了我的个人项目上:D
    如果你能用伪代码(或者更好的JavaScript)来回答,那就太酷了。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Nina Scholz    6 年前

    您可以检查数组是否包含以给定路径开头的字符串。然后过滤掉该项目。

    var paths = ['/root/', '/root/folder1/', '/root/folder2', '/root/folder2/folder3/', '/root/folder1/folder4', '/root/folder2/folder3/folder5'],
        result = paths.filter((p, i, a) => !a.slice(i + 1).some(o => o.startsWith(p)));
        
    console.log(result);
        2
  •  1
  •   planet_hunter    6 年前

    我尝试了不同的方法 filter & some API替代

        let paths = ['/root/', '/root/folder1/', '/root/folder1/folder4/', '/root/folder2', '/root/folder2/folder3', , '/root/folder2/folder3/folder5', , '/root/folder6/'];
    
    console.log(paths.filter((path) => {
            return !paths.some((indexPath) => { return path !== indexPath && indexPath.indexOf(path) > -1 });
    }));