81 Stimmen

JS: Optimale Methode zum Entfernen eines Dateinamens aus einem Pfad in einer Zeichenfolge?

Ich habe die Zeichenfolgen wie folgt formatiert:
path/to/a/filename.txt

Jetzt möchte ich eine Stringmanipulation durchführen, die es mir ermöglicht, den Teil "Dateiname.txt" sehr effizient aus diesem Code zu entfernen. Mit anderen Worten, ich möchte, dass meine Zeichenkette wie folgt aussieht:
path/to/a/

Wie lässt sich dies am effizientesten bewerkstelligen? Derzeit bin ich die Zeichenfolge zu teilen und die einzelnen Elemente mit Ausnahme der letzten wieder zu verbinden, aber ich habe das Gefühl, dies ist eine wirklich, WIRKLICH ineffiziente Weise, es zu tun. Hier ist meine aktuelle, ineffiziente Code:

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

0 Stimmen

1 Stimmen

split ist zwar sehr schnell, aber definitiv nicht der schnellste Weise...

161voto

Kees de Kooter Punkte 6788

Verwenden Sie lastIndexOf(), um die Position des letzten Schrägstrichs zu ermitteln, und holen Sie den Teil vor dem Schrägstrich mit substring().

str.substring(0, str.lastIndexOf("/"));

2 Stimmen

Beachten Sie, dass dies bei URLs wie dieser eine Zeichenkette mit dem Dateinamen zurückgibt: http://example.com/index.php?p=about/location o http://ex.co/#/14185

1 Stimmen

Dies funktioniert nicht bei Pfaden in Form von /www/test

0 Stimmen

Wenn ich die letzten beiden Indizes entfernen möchte, was könnte ich dann tun? d.h.; ich muss beide Zweige/Indizes aus localhost:2698/Branchen/Index

23voto

Richie Bendall Punkte 5294

Wenn Sie Node.js verwenden:

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

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

0 Stimmen

Welchen Vorteil hat dies gegenüber der einfachen Verwendung von path.dirname ?

2 Stimmen

@JakeHolzinger path.dirname parst Dateien anders, wenn kein Root-Pfad angegeben wird: github.com/nodejs/node/issues/18655

10voto

Gumbo Punkte 617646

Wie wäre es damit:

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

1 Stimmen

Das ist nicht effizient, Sie erstellen ein Array, entfernen Elemente, erstellen eine Zeichenkette usw., es sieht nur irgendwie cool aus

7voto

Justin Ohms Punkte 2881

In Node können Sie path.dirname

const path = require('path')

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

directoryPath = path.dirname(fullFilePath) 

console.log(directoryPath)       // ===> '/some/given/path'

3voto

shiva2492 Punkte 369
str = str.split('/')
str.pop()
str.join('/') + '/'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X