2566 Stimmen

Wie kann ich das letzte Zeichen in einer Zeichenkette mit Javascript abschneiden/ausschneiden/abschneiden?

Ich habe eine Schnur, 12345.00 und ich möchte, dass sie zurückkehrt. 12345.0 .

Ich habe mir angesehen trim aber es sieht so aus, als würde es nur Leerzeichen und slice Ich wüsste nicht, wie das funktionieren sollte. Irgendwelche Vorschläge?

10 Stimmen

Wissen Sie, wie das Suffix lautet, oder wollen Sie das letzte Wort anhand der Unterstriche trennen und entfernen?

42 Stimmen

Ist Ihnen das Runden wichtig? 12345,46 = 12345,5 oder 12345,4?

14voto

Kamil Kiełczewski Punkte 69048

パフォーマンス

Heute 2020.05.13 führe ich Tests der gewählten Lösungen auf Chrome v81.0, Safari v13.1 und Firefox v76.0 auf MacOs High Sierra v10.13.6 durch.

Schlussfolgerungen

  • die slice(0,-1) (D) ist die schnellste Lösung für kurze und lange Zeichenfolgen und wird als schnelle, browserübergreifende Lösung empfohlen.
  • Lösungen basierend auf substring (C) und substr (E) schnell sind
  • Lösungen auf der Grundlage regulärer Ausdrücke (A, B) sind langsam/mittelschnell
  • die Lösungen B, F und G sind bei langen Saiten langsam
  • Lösung F ist am langsamsten für kurze Saiten, G ist am langsamsten für lange Saiten

enter image description here

Détails

Ich führe zwei Tests für Lösungen durch A , B , C , D , E( ext ), F , G(my)

  • für eine 8-Zeichen-Kurzzeichenfolge (aus der OP-Frage) - Sie können es ausführen HIER
  • für eine 1M lange Zeichenkette - Sie können es ausführen HIER

Die Lösungen sind im folgenden Ausschnitt dargestellt

function A(str) {
  return str.replace(/.$/, '');
}

function B(str) {
  return str.match(/(.*).$/)[1];
}

function C(str) {
  return str.substring(0, str.length - 1);
}

function D(str) {
  return str.slice(0, -1); 
}

function E(str) {
  return str.substr(0, str.length - 1);
}

function F(str) {
  let s= str.split("");
  s.pop();
  return s.join("");
}

function G(str) {
  let s='';
  for(let i=0; i<str.length-1; i++) s+=str[i];
  return s;
 }

// ---------
// TEST
// ---------

let log = (f)=>console.log(`${f.name}: ${f("12345.00")}`);

[A,B,C,D,E,F,G].map(f=>log(f));

This snippet only presents soutions

Hier sind Beispielergebnisse für Chrome für eine kurze Zeichenfolge

enter image description here

12voto

Marc477 Punkte 151

Regex verwenden:

let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);

0 Stimmen

Abgesehen davon, dass es nicht Unicode-fähig ist, passt es auch nicht zu Zeilenumbrüchen.

10voto

dariom Punkte 4275

Wie wäre es damit:

let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));

10voto

sites Punkte 20647

1. (.*) erfasst ein beliebiges Zeichen mehrfach:

console.log("a string".match(/(.*).$/)[1]);

2. . , entspricht dem letzten Zeichen, in diesem Fall:

console.log("a string".match(/(.*).$/));

3. $ mit dem Ende der Zeichenkette überein:

console.log("a string".match(/(.*).{2}$/)[1]);

9 Stimmen

Mir gefällt das, weil Sie trotz .splice() einen Weg gefunden haben, einen regulären Ausdruck zu verwenden.

3 Stimmen

Abgesehen davon, dass es nicht Unicode-fähig ist, passt es auch nicht zu Zeilenumbrüchen.

8voto

Mark Walters Punkte 11507

Hier ist eine Alternative, die ich in den anderen Antworten nicht gesehen habe, nur zum Spaß.

var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));

Nicht so gut lesbar oder einfach wie slice oder substring, aber es erlaubt Ihnen, mit der Zeichenkette zu spielen, indem Sie einige nette Array-Methoden verwenden, also wissenswert.

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