JS:最优化的方法是从字符串中的路径中删除文件名?

DaV*_*nce 54 javascript optimization

我的字符串格式如下:
path/to/a/filename.txt

现在我想做一些字符串操作,这使我能够非常有效地从这段代码中删除"filename.txt"部分.换句话说,我希望我的字符串成为这样:
path/to/a/

最有效的方法是什么?目前我正在分割字符串并重新连接除最后一个元素之外的单独元素,但我感觉这是一种真正的,非常低效的方法.这是我目前效率低下的代码:

res.getPath = function(file)
{
  var elem = file.split("/");
  var str = "";
  for (var i = 0; i < elem.length-1; i++)
    str += elem[i] + "/";
  return str;
}
Run Code Online (Sandbox Code Playgroud)

Kee*_*ter 110

使用lastIndexOf()查找最后一个斜杠的位置,并使用substring()获取斜杠之前的部分.

str.substring(0, str.lastIndexOf("/"));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将返回一个带有 URL 上的文件名的字符串,如下所示:“http://example.com/index.php?p=about/location”或“http://ex.co/#/14185” (2认同)

Gum*_*mbo 10

这个怎么样:

"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"
Run Code Online (Sandbox Code Playgroud)


Ric*_*all 10

如果您使用的是 Node.js:

const path = require("path")
const removeFilePart = dirname => path.parse(dirname).dir

removeFilePart("/a/b/c/d.txt")
// Returns "/a/b/c"
Run Code Online (Sandbox Code Playgroud)

  • 当没有提供根路径时,@JakeHolzinger path.dirname 以不同的方式解析文件:https://github.com/nodejs/node/issues/18655 (2认同)

Jus*_*hms 7

在节点中,您可以使用path.dirname

const path = require('path')

fullFilePath = '/some/given/path/to-a-file.txt' 

directoryPath = path.dirname(fullFilePath) 

console.log(directoryPath)       // ===> '/some/given/path'
Run Code Online (Sandbox Code Playgroud)