web-dev-qa-db-fra.com

JavaScript couper / couper / couper le dernier caractère de la chaîne

J'ai une chaîne, 12345.00, et j'aimerais qu'elle retourne 12345.0.

J'ai jeté un œil à trim, mais il semble qu'il s'agisse uniquement de rogner les espaces et slice ce que je ne vois pas comment cela fonctionnerait. Aucune suggestion?

1785
Phill Pafford

Vous pouvez utiliser la fonction sous-chaîne :

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

C'est la réponse acceptée, mais selon les conversations ci-dessous, la syntaxe slice est beaucoup plus claire:

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

Vous pouvez utiliser slice ! Vous devez juste vous assurer que vous savez comment l'utiliser. Les nombres positifs sont relatifs au début, les nombres négatifs sont relatifs à la fin.

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

Vous pouvez utiliser la méthode sous-chaîne des objets chaîne JavaScript:

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

Il supprime inconditionnellement les quatre derniers caractères de la chaîne s.

Cependant, si vous voulez conditionnellement supprimer les quatre derniers caractères, uniquement s'ils sont exactement _bar:

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

La méthode la plus simple consiste à utiliser la méthode slice de la chaîne, qui autorise les positions négatives (correspondant aux décalages à partir de la fin de la chaîne):

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

Si vous avez besoin de quelque chose de plus général pour tout supprimer après (et y compris) le dernier trait de soulignement, vous pouvez procéder comme suit (à condition que s contienne au moins un trait de soulignement):

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

Pour un nombre comme votre exemple, je vous recommande de procéder de la manière suivante substring:

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

Notez que cela va en fait arrondir le nombre, bien que j'imagine que c'est souhaitable mais peut-être pas:

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

Utilisation de la fonction slice de JavaScript:

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

Cela pourrait être utilisé pour supprimer '_bar' à la fin d'une chaîne, de n'importe quelle longueur.

28
Akshay Joshi

Une expression régulière est ce que vous recherchez:

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

Que diriez-vous:

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

Essaye ça:

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

Utilisez 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. (. *), capture n'importe quel caractère plusieurs fois
  2. ., correspond au dernier caractère, dans ce cas
  3. $, correspond à la fin de la chaîne
7
juanpastas

Voici une alternative que je ne pense pas avoir vue dans les autres réponses, juste pour le plaisir.

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

Pas aussi lisible ou simple qu'une tranche ou une sous-chaîne, mais vous permet de jouer avec la chaîne en utilisant certaines méthodes de tableau Nice, ce qui vaut la peine d'être connu.

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

Si vous souhaitez arrondir les flottants de manière générique, au lieu de simplement couper le dernier caractère:

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: On dirait qu'il existe une fonction intégrée pour cela, comme le souligne Paolo. Cette solution est évidemment beaucoup plus propre que la mienne. Utilisez parseFloat suivi de toFixed

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