Il y a beaucoup de réponses ici, et toutes sont basées sur deux méthodes:
- METHODE 1: diviser la chaîne en utilisant deux sous-chaînes et remplir le caractère entre elles
- MÉTHODE2: convertir la chaîne en tableau de caractères, remplacer un membre du tableau et le rejoindre
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:
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
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.
str[0] = 'x'
cela ne semble pas générer d'erreurs, mais n'a pas l'effet souhaité!