GCT1015
2022-10-13 16:21:57
我正在嘗試將字符串解析為理論上的虛擬路徑(全部在客戶端創(chuàng)建),使用普通的舊 JavaScript,沒有 NodeJS,什么都沒有(我嘗試創(chuàng)建一個新 URL 或?qū)⒙窂皆O(shè)置為 href 等,但我希望它在網(wǎng)絡(luò)工作者內(nèi)部工作)?;旧?,有一個虛擬文件系統(tǒng),它以 . 開頭,"C:/"然后像所有其他路徑系統(tǒng)一樣下降。假設(shè)我得到一個字符串作為輸入,例如"C:/someDir/someOtherDir/someThirdDir/../../folderInSomeDir/fileInFolderInSomeDir.txt"所以理論上這將訪問,正如文件本身的名稱所說,文件夾內(nèi)的文件,該文件夾本身位于名為someDir.最難處理的部分是該../../部分,因此上面的預(yù)期輸出字符串將是"C:/someDir/folderInSomeDir/fileInFolderInSomeDir.txt"我只是想知道如何準確地處理該../../部分,我嘗試拆分字符串/并循環(huán)遍歷各個部分,確定當(dāng)前字符串是否等于..,并跟蹤當(dāng)前目錄,這將立即在 each 之前..,但我對接下來要做什么以獲取輸出字符串一無所知。這是我的功能,目前b.onclick = () => { out.innerHTML = resolve(p.value)};function resolve(path, basePath = "/") { var pathd = pathify(path) if(basePath != "/") basePath = resolve(basePath) var based = pathify(basePath) var baseDirs = based.split("/") var directs = pathd.split("/") var upDirs = 0 var currentDir = "" var numberDirs var result directs.forEach((x, i, ar) => { if(x == ".." || i == 0 && x == "") { upDirs++ } else { currentDir = x } }) result = directs.join("/") //what else do I Do?! return result } function pathify(path) { var newPath = "" if(typeof path == "string") { var slashesDoubled = 0, dotsDoubed path.split("").forEach(x => { var isIts = [ "\n" ]
1 回答

狐的傳說
TA貢獻1804條經(jīng)驗 獲得超3個贊
您可以將其拆分并將其縮減為一個新數(shù)組。如果段是.,則忽略它,如果是..從結(jié)果中彈出最后一個段,則添加它:
const path = "C:/someDir/someOtherDir/someThirdDir/../../folderInSomeDir/fileInFolderInSomeDir.txt";
const result = path.split('/')
.reduce((a, v) => {
if (v === '.'); // do nothing
else if (v === '..') a.pop();
else a.push(v);
return a;
}, [])
.join('/');
console.log(result);
添加回答
舉報
0/150
提交
取消