J'ai une chaîne, disons Hello world
et je dois remplacer le caractère à l'index 3. Comment puis-je remplacer un caractère en spécifiant un index?
var str = "hello world";
J'ai besoin de quelque chose comme
str.replaceAt(0,"h");
J'ai une chaîne, disons Hello world
et je dois remplacer le caractère à l'index 3. Comment puis-je remplacer un caractère en spécifiant un index?
var str = "hello world";
J'ai besoin de quelque chose comme
str.replaceAt(0,"h");
str[0] = 'x'
cela ne semble pas générer d'erreurs, mais n'a pas l'effet souhaité!"use strict"
est activé:Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'
(au moins dans les navigateursRéponses:
En JavaScript, les chaînes sont immuables , ce qui signifie que le mieux que vous puissiez faire est de créer une nouvelle chaîne avec le contenu modifié et d'affecter la variable à la pointer.
Vous devrez définir la
replaceAt()
fonction vous-même:Et utilisez-le comme ceci:
la source
Il n'y a pas de
replaceAt
fonction en JavaScript. Vous pouvez utiliser le code suivant pour remplacer n'importe quel caractère dans n'importe quelle chaîne à la position spécifiée:la source
substr
est considéré comme une fonction héritée et doit être évité autant que possible .Tu ne peux pas. Prenez les caractères avant et après la position et enchaînez dans une nouvelle chaîne:
la source
String.prototype.substring
plusString.prototype.substr
.Il y a beaucoup de réponses ici, et toutes sont basées sur deux méthodes:
Personnellement, j'utiliserais ces deux méthodes dans des cas différents. Laisse-moi expliquer.
@FabioPhms: Votre méthode était celle que j'ai utilisée initialement et j'avais peur qu'elle soit mauvaise sur une chaîne avec beaucoup de caractères. Cependant, la question est de savoir quel est le nombre de personnages? Je l'ai testé sur 10 paragraphes "lorem ipsum" et cela m'a pris quelques millisecondes. Ensuite, je l'ai testé sur une corde 10 fois plus grande - il n'y avait vraiment pas de grande différence. Hm.
@vsync, @Cory Mawhorter: Vos commentaires sont sans ambiguïté; cependant, encore une fois, qu'est-ce qu'une grosse chaîne? Je suis d'accord que pour 32 ... 100kb les performances devraient être meilleures et que l'on devrait utiliser la sous-chaîne-variante pour cette opération de remplacement de caractère.
Mais qu'arrivera-t-il si je dois faire pas mal de remplacements?
Je devais effectuer mes propres tests pour prouver ce qui est plus rapide dans ce cas. Disons que nous avons un algorithme qui manipulera une chaîne relativement courte composée de 1000 caractères. Nous nous attendons à ce qu'en moyenne chaque caractère de cette chaîne soit remplacé ~ 100 fois. Ainsi, le code pour tester quelque chose comme ceci est:
J'ai créé un violon pour ça, et c'est ici . Il existe deux tests, TEST1 (sous-chaîne) et TEST2 (conversion de tableau).
Résultats:
Il semble que la conversion de tableau bat la sous-chaîne de 2 ordres de grandeur! Alors - qu'est-ce qui s'est passé ici ???
Ce qui se passe réellement, c'est que toutes les opérations dans TEST2 sont effectuées sur le tableau lui-même, en utilisant l'expression d'affectation comme
strarr2[p] = n
. L'affectation est vraiment rapide par rapport à une sous-chaîne sur une grande chaîne, et il est clair que cela va gagner.Il s'agit donc de choisir le bon outil pour le travail. Encore.
la source
Le travail avec des vecteurs est généralement plus efficace pour contacter String.
Je suggère la fonction suivante:
Exécutez cet extrait:
la source
Array.prototype.replace = function(index, val) { this[index] = val; return this; };
'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
En Javascript, les chaînes sont immuables, vous devez donc faire quelque chose comme
Pour remplacer le caractère de x en i par «h»
la source
la source
split
etjoin
One-liner utilisant String.replace avec callback (pas de support emoji):
Expliqué:
la source
Afficher l'extrait de code
Cette méthode est bonne pour les chaînes de petite longueur mais peut être lente pour un texte plus volumineux.
la source
@CemKalyoncu: Merci pour la bonne réponse!
Je l'ai également légèrement adapté pour le rendre plus proche de la méthode Array.splice (et pris en compte la note de @Ates):
la source
Array.splice
fonctionnalité de type.Cela fonctionne de manière similaire à
Array.splice
:la source
Tu pourrais essayer
la source
Si vous souhaitez remplacer des caractères dans une chaîne, vous devez créer des chaînes modifiables. Ce sont essentiellement des tableaux de caractères. Vous pouvez créer une usine:
Ensuite, vous pouvez accéder aux caractères et l'ensemble du tableau convertit en chaîne lorsqu'il est utilisé comme chaîne:
la source
En généralisant la réponse d'Afanasii Kurakin, nous avons:
Développons et expliquons à la fois l'expression régulière et la fonction de remplacement:
L'expression régulière
.
correspond exactement à un caractère. Leg
fait correspondre à tous les caractères d'une boucle for. Lareplacer
fonction est appelée en fonction du caractère d'origine et de l'index de l'emplacement de ce caractère dans la chaîne. Nous faisons une simpleif
déclaration pour déterminer si nous allons retourner soitorigChar
ounewChar
.la source
Vous pouvez étendre le type de chaîne pour inclure la méthode incrustée:
Ensuite, vous pouvez appeler la fonction:
la source
J'ai fait une fonction qui fait quelque chose de similaire à ce que vous demandez, il vérifie si un caractère dans une chaîne est dans un tableau de caractères non autorisés s'il le remplace par ''
la source
cela est facilement réalisable avec RegExp!
la source
Voici une version que j'ai trouvée si vous souhaitez styliser des mots ou des caractères individuels à leur index dans react / javascript.
Exemple de travail: https://codesandbox.io/s/ov7zxp9mjq
Et voici une autre méthode alternative
Et un autre...
la source
Je sais que c'est ancien mais la solution ne fonctionne pas pour un indice négatif, j'y ajoute donc un patch. j'espère que ça aide quelqu'un
la source
Disons que vous souhaitez remplacer l'
Kth
index (index basé sur 0) par'Z'
. Vous pouvez utiliserRegex
pour ce faire.la source
Vous pouvez utiliser la fonction suivante pour remplacer
Character
ouString
à une position particulière d'une chaîne. Pour remplacer tous les cas de correspondance suivants, utilisez laString.prototype.replaceAllMatches()
fonction.Tester:
Production:
la source
Voici ma solution en utilisant l'opérateur ternaire et cartographique. Fin plus lisible et maintenable plus facile à comprendre si vous me le demandez.
C'est plus dans es6 et les meilleures pratiques.
la source
Les méthodes ici sont compliquées. Je le ferais de cette façon:
C'est aussi simple que possible.
la source