簡體   English   中英

在 JavaScript 中將一個路徑划分為多個完整路徑

[英]Divide a path in multiple full paths in JavaScript

我試圖找到從一條路徑獲得一系列“完整”路徑的最佳方法。

輸入 :

'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);
 }

更重要的是,我的代碼在每個路徑的末尾和源代碼的開頭都有一個 /,我可以添加用於刪除這些的代碼,但我想要更優化的代碼。

使用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)

使用單個 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM