Je voudrais alerter chaque lettre individuelle d'une chaîne, mais je ne sais pas comment procéder.
Donc, si j'ai:
var str = 'This is my string';
Je voudrais pouvoir alerter séparément T, h, i, s, etc. Ce n'est que le début d'une idée sur laquelle je travaille, mais j'ai besoin de savoir comment traiter chaque lettre séparément.
Je veux utiliser jQuery et pensais que je pourrais avoir besoin d'utiliser la fonction split après avoir testé la longueur de la chaîne.
Des idées?
javascript
jquery
string
Nic Hubbard
la source
la source
for(const c of str) { ... }
. Plus de cela plus loin dans une réponse assez détaillée mais pas suffisamment votée. PS: Le lien @ ARJUN ne fonctionne pas pour moi.Réponses:
Si l'ordre des alertes est important, utilisez ceci:
Si l'ordre des alertes n'a pas d'importance, utilisez ceci:
Afficher l'extrait de code
la source
[]
pour obtenir le caractère dans une position spécifique n'est pas pris en charge dans IE <9charAt
est resté des jours UCS-2 où il n'y avait pas de paires de substitution et pour résoudre le problème, une nouvelle fonction acodepointAt
été ajoutée à JavaScript qui gère correctement notre pile de caca amicale. Je crois que Java l'a aussi.C'est probablement plus que résolu. Je veux juste contribuer avec une autre solution simple:
la source
[...text].forEach(console.log)
forEach()
transmet l'index et le tableau comme deuxième et troisième argument. Je préfère ne pas enregistrer cela ..for (let c of [...text]) { console.log(c) }
let c of text
fait déjà le travail.Une solution possible en javascript pur:
la source
Comment traiter chaque lettre de texte (avec des repères)
https://jsperf.com/str-for-in-of-foreach-map-2pour
Classique et de loin celui avec le plus de performances . Vous devriez aller avec celui-ci si vous prévoyez de l'utiliser dans un algorithme critique de performance, ou qu'il nécessite la compatibilité maximale avec les versions du navigateur.
pour ... de
for ... of est le nouveau ES6 pour itérateur. Pris en charge par la plupart des navigateurs modernes. Il est visuellement plus attrayant et moins sujet aux erreurs de frappe. Si vous optez pour celui-ci dans une application de production, vous devriez probablement utiliser un transpilateur comme Babel .
pour chaque
Approche fonctionnelle . Approuvé Airbnb . Le plus gros inconvénient de le faire de cette façon est le
split()
, qui crée un nouveau tableau pour stocker chaque lettre individuelle de la chaîne.ou
Ce qui suit sont ceux que je n'aime pas.
pour ... dans
Contrairement à pour ... de, vous obtenez l'index des lettres au lieu de la lettre. Il fonctionne assez mal.
carte
Approche fonctionnelle, ce qui est bien. Cependant, la carte n'est pas destinée à être utilisée pour cela. Il doit être utilisé lorsque vous devez modifier les valeurs à l'intérieur d'un tableau, ce qui n'est pas le cas.
ou
la source
for
boucle classique était en fait la deuxième plus lente, alors qu'ellefor...of
était la plus rapide (environ trois fois plus rapide quefor
).for
boucle étant légèrement plus rapide.La plupart des réponses, sinon toutes, sont erronées car elles se brisent chaque fois qu'il y a un caractère dans la chaîne en dehors du BMP Unicode (plan multilingue de base) . Cela signifie que tous les Emoji seront brisés .
JavaScript utilise UTF- 16 Unicode pour toutes les chaînes. Dans UTF-16, les caractères au-delà du BMP sont constitués de deux parties, appelées « paire de substitution » et la plupart des réponses ici traiteront chaque partie de ces paires individuellement au lieu d'un seul caractère.
Une façon dans le JavaScript moderne depuis au moins 2016 est d'utiliser le nouvel itérateur String . Voici l'exemple (presque) tout droit sorti de MDN:
la source
Vous pouvez essayer ceci
la source
Encore une solution ...
la source
for..of
bouclefor (let ch of t) { alert(ch) }
Quand j'ai besoin d'écrire du code court ou un one-liner, j'utilise ce "hack":
Cela ne comptera pas les nouvelles lignes, ce qui peut être une bonne ou une mauvaise chose. Si vous souhaitez inclure des sauts de ligne, remplacez:
/./
par/[\S\s]/
. Les autres monolignes que vous verrez probablement utiliser,.split()
ce qui pose de nombreux problèmesla source
forEach
fonction de l' appel par rapport aux paramètres envoyésreplace
. Si je sais que je suis en ASCII, je pense que j'ai encore des cas d'utilisation poursplit
. Excellente réponse, cependant!u
drapeau avec leg
drapeau? OK vient de tester et j'avais raison.Le nouveau JS permet ceci:
la source
Il est préférable d'utiliser l'instruction for ... of, si la chaîne contient des caractères unicode, en raison de la taille d'octet différente.
la source
réponse courte:
Array.from(string)
vous donnera ce que vous voulez probablement et vous pourrez ensuite le répéter ou quoi que ce soit, car il ne s'agit que d'un tableau.ok essayons-le avec cette chaîne:
abc|⚫️\n⚪️|👨👩👧👧
.les points de code sont:
certains caractères ont donc un point de code (octet) et certains en ont deux ou plus, et une nouvelle ligne a été ajoutée pour des tests supplémentaires.
donc après le test, il y a deux façons:
la source
Vous pouvez désormais parcourir les points de code Unicode individuels contenus dans une chaîne à l'aide de
String.prototype[@@iterator]
, qui renvoie une valeur de type Symbol bien connuSymbol.iterator
- l'itérateur par défaut pour les objets de type tableau (String
dans ce cas).Exemple de code:
Cela fonctionne avec les caractères Unicode tels que les emoji ou les caractères non romains qui déclencheraient les constructions héritées.
Référence: Lien MDN vers String.prototype @@ itérateur .
la source
for ... of
boucle également sur la chaîne - c'est-à-dire le sucre de syntaxe pour accéder à l'itérateur.Vous pouvez maintenant utiliser dans mot-clé.
la source
in
est une partie légitime de la langue. Utilisez les choses de manière appropriée. Votre article met en garde quein
les touches alpha sont interprétées de la même manière que les touches numériques. Donc? C'est peut-être ce que tu veux. On pourrait également dire que d'autres méthodes ignorent incorrectement les clés alpha. Imo,of
a un comportement correct. Dans les tableaux JS, les éléments sans clé alpha ont toujours des clés: numériques. Dans ma console, JS traite "correctement" la touche alpha comme les touches numériques:>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
Vous pouvez obtenir un tableau des caractères individuels comme ça
puis boucle en utilisant Javascript ordinaire, ou bien vous pouvez parcourir les caractères de la chaîne en utilisant jQuery par
la source
vous pouvez convertir cette chaîne en un tableau de caractères en utilisant
split()
, puis l'itérer.la source
Si vous souhaitez effectuer une transformation sur le texte au niveau d'un caractère et récupérer le texte transformé à la fin, vous feriez quelque chose comme ceci:
Donc, les étapes:
la source
Dans le JavaScript d'aujourd'hui, vous pouvez
Array.prototype.map.call('This is my string', (c) => c+c)
De toute évidence, c + c représente tout ce que vous voulez faire avec c.
Cela revient
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ", "mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
la source
[...'This is my string'].map((c)=>c+c)
Cela devrait fonctionner dans les anciens navigateurs et avec des caractères UTF-16 comme 💩.
Cela devrait être la solution la plus compatible. Cependant, elle est moins performante qu'une
for
boucle.J'ai généré l'expression régulière en utilisant regexpu
J'espère que cela t'aides!
la source
Vous pouvez accéder à des caractères uniques avec
str.charAt(index)
oustr[index]
. Mais cette dernière méthode ne fait pas partie d'ECMAScript, il vaut donc mieux choisir l'ancienne.la source
Si vous souhaitez animer chaque personnage, vous devrez peut-être l'envelopper dans l'élément span;
Je pense que c'est la meilleure façon de le faire, puis de traiter les portées. (par exemple avec TweenMax)
TweenMax.staggerFromTo ($ demoText.find ("span"), 0,2, {autoAlpha: 0}, {autoAlpha: 1}, 0,1);
la source
Essayez ce code
la source