it-swarm.com.de

JavaScript hackt / schneidet / schneidet das letzte Zeichen in der Zeichenkette ab

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

Ich habe trim angeschaut, aber es sieht so aus, als würde nur Whitespace und slice abgeschnitten, was ich nicht sehe, wie das funktionieren würde. Irgendwelche Vorschläge?

1785
Phill Pafford

Sie können die Teilzeichenfolge Funktion verwenden:

var str = "12345.00";
str = str.substring(0, str.length - 1); // "12345.0"

Dies ist die akzeptierte Antwort, aber gemäß den folgenden Konversationen ist die Syntax slice viel klarer:

var str = "12345.00";
str = str.slice(0, -1); // "12345.0"
2944
Jon Erickson

Sie können Slice verwenden! Sie müssen nur sicherstellen, dass Sie wissen, wie man es benutzt. Positive #s sind relativ zum Anfang, negative Zahlen sind relativ zum Ende.

js>"12345.00".slice(0,-1)
12345.0
1234
Jason S

Sie können die Teilzeichenfolge -Methode von JavaScript-Zeichenfolgenobjekten verwenden:

s = s.substring(0, s.length - 4)

Bedingungslos werden die letzten vier Zeichen aus der Zeichenfolge s entfernt.

Wenn Sie jedoch die letzten vier Zeichen bedingt entfernen möchten, müssen Sie genau _bar angeben:

var re = /_bar$/;
s.replace(re, "");
252
Alex Martelli

Die einfachste Methode ist die Verwendung der slice -Methode des Strings, die negative Positionen zulässt (die Offsets vom Ende des Strings entsprechen):

var s = "your string";
var withoutLastFourChars = s.slice(0, -4);

Wenn Sie etwas allgemeineres benötigen, um alles nach dem letzten Unterstrich zu entfernen (und einzuschließen), können Sie Folgendes tun (solange s mindestens einen Unterstrich enthält):

var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"
154
Tim Down

Für eine Zahl wie Ihr Beispiel würde ich empfehlen, dies über substring zu tun:

alert(parseFloat('12345.00').toFixed(1)); // 12345.0

Beachten Sie, dass dies tatsächlich die Zahl rundet, was ich mir gewünscht vorstellen würde, aber vielleicht nicht:

alert(parseFloat('12345.46').toFixed(1)); // 12345.5
66

Verwenden der Slice-Funktion von JavaScript:

var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here

Dies kann verwendet werden, um '_bar' am Ende einer Zeichenfolge beliebiger Länge zu entfernen.

28
Akshay Joshi

Ein regulärer Ausdruck ist das, wonach Sie suchen:

var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
16
w35l3y

Wie wäre es mit:

var myString = "12345.00";
myString.substring(0, myString.length - 1);
9
dariom

Versuche dies:

var myString = "Hello World!";
myString.slice(0, -1);
7

Verwenden Sie Regex:

var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
7
Marc477
"a string".match(/(.*).$/)[1] // => a strin

"a string".match(/(.*).$/) // returns ["a string", "a strin"]

"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
  1. (. *), erfasst ein beliebiges Zeichen mehrmals
  2. stimmt in diesem Fall mit dem letzten Zeichen überein
  3. $, stimmt mit dem Ende der Zeichenfolge überein
7
juanpastas

Hier ist eine Alternative, von der ich glaube nicht, dass ich sie in den anderen Antworten gesehen habe, nur zum Spaß.

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

Nicht so lesbar oder einfach wie Slice oder Teilzeichenfolge, aber Sie können mit der Zeichenfolge mithilfe einiger netter Array-Methoden spielen.

5
Mark Walters
debris = string.split("_") //explode string into array of strings indexed by "_"

debris.pop(); //pop last element off the array (which you didn't want)

result = debris.join("_"); //Fuse the remainng items together like the Sun
4
uofc
var str = "test!";
var newStr = str.slice(0,-1); //test
4
user669677

Wenn Sie generische Rundungen von Gleitkommazahlen durchführen möchten, anstatt nur das letzte Zeichen zu trimmen:

var float1 = 12345.00,
    float2 = 12345.4567,
    float3 = 12345.982;

var MoreMath = {
    /**
     * Rounds a value to the specified number of decimals
     * @param float value The value to be rounded
     * @param int nrDecimals The number of decimals to round value to
     * @return float value rounded to nrDecimals decimals
     */
    round: function (value, nrDecimals) {
        var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
        return Math.round(value * x) / x;
    }
}

MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0

EDIT: Es scheint, als gäbe es dafür eine eingebaute Funktion, wie Paolo betont. Diese Lösung ist offensichtlich viel sauberer als meine. Verwenden Sie parseFloat gefolgt von toFixed

3
if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}
1

https://jsfiddle.net/invos/w3zeqv6v/

https://stackoverflow.com/questions/34817546/javascript-how-to-delete-last-two-characters-in-a-string

Verwenden Sie einfach trim, wenn Sie keine Leerzeichen möchten

"11.01 °C".slice(0,-2).trim()

1
invos