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

问题描述 投票:0回答:9

我的字符串格式如下:

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;
}
javascript optimization
9个回答
158
投票

只需让 ChatGPT 为您解决此问题即可。简单的。尽管您的里程可能会有所不同。


22
投票

如果您使用 Node.js:

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

removeFilePart("/a/b/c/d.txt")
// Returns "/a/b/c"

10
投票

这个怎么样:

"path/to/a/filename.txt".split("/").slice(0, -1).join("/")+"/"

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'

3
投票
str = str.split('/')
str.pop()
str.join('/') + '/'

1
投票
function getDirname(pathname, separator) {
    var parts = pathname.split(separator);
    if (parts[parts.length - 1].indexOf('.') > -1) {
        return parts.slice(0, -1).join(separator)
    }
    return pathname;
}

用途:

var dir = getDirname(url.parse(request.url).pathname, '/');

.

var dir = getDirname(path.join('foo', 'bar', 'text.txt'), path.sep);

0
投票
function splitPath(path) {
  var dirPart, filePart;
  path.replace(/^(.*\/)?([^/]*)$/, function(_, dir, file) {
    dirPart = dir; filePart = file;
  });
  return { dirPart: dirPart, filePart: filePart };
}

那里更好


0
投票

如果要处理文件上传表单中的文件名,HTML5 规范建议使用以下代码:

function extractFilename(path) {
  if (path.substr(0, 12) == "C:\\fakepath\\")
    return path.substr(12); // modern browser
  var x;
  x = path.lastIndexOf('/');
  if (x >= 0) // Unix-based path
    return path.substr(x+1);
  x = path.lastIndexOf('\\');
  if (x >= 0) // Windows-based path
    return path.substr(x+1);
  return path; // just the filename
}

参考:http://www.w3.org/TR/html5/number-state.html#file-upload-state http://www.w3.org/TR/html5/forms.html#file-upload-state-(type=file)


0
投票

test/dir/lib/file- _09.ege.jpg
- 将会 -
test/dir/lib/

file- _09.ege.jpg
- 将会 -
file- _09.ege.jpg

    console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg'));

    function getPath(path){
        path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i);
        if(path != null){
            return path[0];
        }else{
            return false;
        }            
    }

console.log("test - "+getPath('test/dir/lib/file- _09.ege.jpg'));

        function getPath(path){
            path = path.match(/(^.*[\\\/]|^[^\\\/].*)/i);
            if(path != null){
                return path[0];
            }else{
                return false;
            }            
        }

© www.soinside.com 2019 - 2024. All rights reserved.