5 votes

Remplacer une valeur à la fin d'une chaîne convertie en tableau en une ligne ?

Existe-t-il un moyen de remplacer le dernier élément du tableau en une seule ligne de code ?

Ce que je reçois :

return "my.long.string";

Ce que je veux :

return "my.long.output";

Le code jusqu'ici :

var value = "my.long.string";
var newValue = value.split(".").pop().join(".") + "output";

Erreur :

SyntaxError: Unexpected string

Mise à jour :

Nina a répondu. J'ai également eu un cas où j'avais besoin d'insérer une valeur à la fin de la chaîne (ajouter un nom à un chemin de fichier). C'est la même chose que ci-dessus mais en remplaçant tout à droite avant le dernier point.

var value = "my.long.string";
var result = value.split(".").slice(0, -1).join(".") + "_stats." + "output";

6voto

Nina Scholz Points 17120

Vous pourriez découper le tableau et concaténer la dernière chaîne. Array#slice prend des valeurs négatives pour les décalages à partir de la fin du tableau.

var value = "my.long.string";

value = value.split('.').slice(0, -1).concat('output').join('.');

console.log(value);

4voto

Dan Kreiger Points 3639

Vous n'avez pas non plus besoin de le convertir en tableau. Vous pouvez utiliser lastIndexOf comme ça :

const value = "my.long.string";

console.log(`${value.substring(0,value.lastIndexOf('.'))}.output`);

2voto

adiga Points 16410

Vous pourriez utiliser la regex (.*\.).* pour tout capturer jusqu'au moment final . y replace la dernière partie avec la nouvelle chaîne ( Démonstration de Regex ). $1 récupère la chaîne de caractères du groupe de capture

let str = "my.long.string"
let newStr = str.replace(/(.*\.).*/, `$1output`);
console.log(newStr)

0voto

Eduardo Garcia Points 189
var value = "my.long.string";
var newValue = value.split('.').filter((val, idx, arr) => {
    return idx < arr.length - 1
}).concat('output').join('.');

0voto

Mihai Points 361

Première solution

var value = "my.long.string";
var newValue = value.split('.').splice(0, value.match(/\./g).length).concat('output').join('.');
console.log(newValue);

Deuxième solution (plus courte)

var value = "my.long.string";
var newValue = value.split('.').fill('output', value.match(/\./g).length).join('.');
console.log(newValue);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X