【问题标题】:Divide a path in multiple full paths in JavaScript在JavaScript中将路径划分为多个完整路径
【发布时间】:2020-11-10 09:59:18
【问题描述】:

我试图找到从一条路径获得一组“完整”路径的最佳方法。

输入:

'source/folder/folder2/folder3/file'

我想要这个输出:

[
'/',
'/folder',
'/folder/folder2',
'/folder/folder2/folder3',
'/folder/folder2/folder3/file'
]

目前,我可以看到我的代码没有优化:

 pathArray = path.split('/');
 if (pathArray [0] === '') {
   pathArray .shift();
 }
 if (pathArray [pathArray .length - 1] === '') {
    pathArray .pop();
 }
 const finalArrayPath = [];
 for (let i = 0; i < pathArray.length; i++) {
   let path = '';
   for (let j = 0; j <= i; j++) {
     path = path + pathArray[j] + '/';
   }
   finalArrayPath.push(path);
 }

更重要的是,我的代码在每个路径的末尾都有一个 /,而源代码在开头,我可以添加代码来删除这些,但我想要一个更优化的代码。

【问题讨论】:

  • 客户端javascript还是nodejs?
  • 这是客户端

标签: javascript split path


【解决方案1】:

使用Array.prototype.reduce 方法可以做到:

const path = "source/folder/folder2/folder3/file";

const result = path.split("/").slice(1).reduce((allPaths, subPath) => {
  const lastPath = allPaths[allPaths.length-1];
  allPaths.push(lastPath.endsWith("/") ? (lastPath + subPath) : `${lastPath}/${subPath}`);
  return allPaths;
}, ["/"]);

console.log(result)

【讨论】:

  • 真的很聪明!
【解决方案2】:

只有一个 for 循环...

const path = 'source/folder/folder2/folder3/file';

const [root, ...pathArr] = path.split('/');

const paths = [];
for (let i = 0; i <= pathArr.length; i++) {
  paths.push(`/${pathArr.slice(0, i).join('/')}`);
}

console.log('root: ', root);
console.log('paths: ', paths);

或者使用Array.from()...

const path = 'source/folder/folder2/folder3/file';

const [root, ...pathArr] = path.split('/');

const paths = Array.from(
  { length: pathArr.length + 1 },
  (_, i) => `/${pathArr.slice(0, i).join('/')}`
);

console.log('root: ', root);
console.log('paths: ', paths);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2016-08-19
    • 2014-10-29
    • 2012-04-01
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多