Je voudrais alerter chaque lettre d'une chaîne, mais je ne sais pas comment faire.
Donc, si j'ai:
var str = 'This is my string';
J'aimerais pouvoir alerter séparément T, h, i, s, etc. Ceci n'est que le début d'une idée sur laquelle je travaille, mais je dois 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?
Si l'ordre des alertes est important, utilisez ceci:
for (var i = 0; i < str.length; i++) {
alert(str.charAt(i));
}
Si l'ordre des alertes n'a pas d'importance, utilisez ceci:
var i = str.length;
while (i--) {
alert(str.charAt(i));
}
C'est probablement plus que résolu. Je veux juste contribuer avec une autre solution simple:
var text = 'uololooo';
// With ES6
[...text].forEach(c => console.log(c))
// With the `of` operator
for (const c of text) {
console.log(c)
}
// With ES5
for (var x = 0, c=''; c = text.charAt(x); x++) {
console.log(c);
}
// ES5 without the for loop:
text.split('').forEach(function(c) {
console.log(c);
});
Une solution possible en javascript pur:
for (var x = 0; x < str.length; x++)
{
var c = str.charAt(x);
alert(c);
}
https://jsperf.com/str-for-in-of-foreach-map-2
Classic et de loin celui avec le plus de performances. Choisissez celui-ci si vous prévoyez de l’utiliser dans un algorithme de performances critiques ou si cela requiert une compatibilité maximale avec les versions de navigateur.
for (var i = 0; i < str.length; i++) {
console.info(str[i]);
}
pour ... de est le nouveau ES6 pour l'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 celle-ci dans une application de production, vous devriez probablement utiliser un transpiler comme Babel .
let result = '';
for (let letter of str) {
result += letter;
}
Approche fonctionnelle. Airbnb approuvé . Le plus gros inconvénient de cette façon de procéder est la split()
, qui crée un nouveau tableau pour stocker chaque lettre de la chaîne.
Pourquoi? Cela applique notre règle immuable. Traiter avec des fonctions pures il est plus facile de raisonner sur les valeurs renvoyées que sur les effets secondaires.
// ES6 version.
let result = '';
str.split('').forEach(letter => {
result += letter;
});
ou
var result = '';
str.split('').forEach(function(letter) {
result += letter;
});
Ce qui suit sont ceux que je n'aime pas.
Contrairement à ... de, vous obtenez l'index des lettres au lieu de la lettre. Il fonctionne assez mal.
var result = '';
for (var letterIndex in str) {
result += str[letterIndex];
}
Approche fonctionnelle, ce qui est bon. Cependant, la carte n'est pas destinée à être utilisée pour cela. Il doit être utilisé pour modifier les valeurs d’un tableau, ce qui n’est pas le cas.
// ES6 version.
var result = '';
str.split('').map(letter => {
result += letter;
});
ou
let result = '';
str.split('').map(function(letter) {
result += letter;
});
Tu peux essayer ça
var arrValues = 'This is my string'.split('');
// Loop over each value in the array.
$.each(arrValues, function (intIndex, objValue) {
alert(objValue);
})
Quand j'ai besoin d'écrire un code court ou un one-liner, j'utilise ce "hack":
'Hello World'.replace(/./g, function (char) {
alert(char);
return char; // this is optional
});
Cela ne comptera pas les nouvelles lignes, ce qui peut être une bonne ou une mauvaise chose. Si vous souhaitez inclure des nouvelles lignes, remplacez: /./
par /[\S\s]/
. L’autre ligne que vous pouvez voir utilise probablement .split()
qui pose de nombreux problèmes
Une autre solution ...
var strg= 'This is my string';
for(indx in strg){
alert(strg[indx]);
}
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 différente de l'octet.
for(var c of "tree 木") { console.log(c); }
//"????A".length === 3
Vous pouvez maintenant utiliser dans mot clé.
var s = 'Alien';
for (var c in s) alert(s[c]);
Vous pouvez obtenir un tableau des caractères individuels comme
var test = "test string",
characters = test.split('');
puis en boucle en utilisant Javascript régulier, ou vous pouvez parcourir les caractères de la chaîne en utilisant jQuery par
var test = "test string";
$(test.split('')).each(function (index,character) {
alert(character);
});
Si vous souhaitez effectuer une transformation sur le texte au niveau du caractère et récupérer le texte transformé à la fin, procédez comme suit:
var value = "alma";
var new_value = value.split("").map(function(x) { return x+"E" }).join("")
Alors les étapes:
Vous pouvez maintenant parcourir différents points de code Unicode contenus dans une chaîne en utilisant String.prototype[@@iterator]
, qui renvoie une valeur de type de symbole bien connu Symbol.iterator
- l'itérateur par défaut pour les objets de type tableau (String
dans ce cas).
Exemple de code:
const str = 'The quick red ???? jumped over the lazy ????! 太棒了!';
let iterator = str[Symbol.iterator]();
let theChar = iterator.next();
while(!theChar.done) {
console.log(theChar.value);
theChar = iterator.next();
}
// logs every unicode character as expected into the console.
Cela fonctionne avec des caractères Unicode tels que des caractères emoji ou non romains qui risqueraient de faire trébucher les constructions héritées.
Référence: Lien MDN vers String.prototype @@ iterator .
réponse courte: Array.from(string)
vous donnera ce que vous voulez probablement et vous pourrez ensuite l'itérer ou ce que vous voulez, puisque c'est juste un tableau.
ok essayons avec cette chaîne: abc|⚫️\n⚪️|????????????????
.
les points de code sont:
97
98
99
124
9899, 65039
10
9898, 65039
124
128104, 8205, 128105, 8205, 128103, 8205, 128103
certains caractères ont donc un codet (octet) et d'autres deux ou plus, et une nouvelle ligne est ajoutée pour des tests supplémentaires.
donc après avoir testé il y a deux façons:
string = "abc|⚫️\n⚪️|????????????????"
console.log({ 'string': string }) // abc|⚫️\n⚪️|????????????????
console.log({ 'string.length': string.length }) // 21
for (let i = 0; i < string.length; i += 1) {
console.log({ 'string[i]': string[i] }) // byte per byte
console.log({ 'string.charAt(i)': string.charAt(i) }) // byte per byte
}
for (let char of string) {
console.log({ 'for char of string': char }) // character groups
}
for (let char in string) {
console.log({ 'for char in string': char }) // index of byte per byte
}
string.replace(/./g, (char) => {
console.log({ 'string.replace(/./g, ...)': char }) // byte per byte
});
string.replace(/[\S\s]/g, (char) => {
console.log({ 'string.replace(/[\S\s]/g, ...)': char }) // byte per byte
});
[...string].forEach((char) => {
console.log({ "[...string].forEach": char }) // character groups
})
string.split('').forEach((char) => {
console.log({ "string.split('').forEach": char }) // byte per byte
})
Array.from(string).forEach((char) => {
console.log({ "Array.from(string).forEach": char }) // character groups
})
Array.prototype.map.call(string, (char) => {
console.log({ "Array.prototype.map.call(string, ...)": char }) // byte per byte
})
var regexp = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g
string.replace(regexp, (char) => {
console.log({ 'str.replace(regexp, ...)': char }) // character groups
});
New JS permet ceci:
const str = 'This is my string';
Array.from(str).forEach(alert);
Essayez ce code
function myFunction() {
var text =(document.getElementById("htext").value);
var meow = " <p> <,> </p>";
var i;
for (i = 0; i < 9000; i++) {
text+=text[i] ;
}
document.getElementById("demo2").innerHTML = text;
}
</script>
<p>Enter your text: <input type="text" id="htext"/>
<button onclick="myFunction();">click on me</button>
</p>
Cela devrait fonctionne dans les navigateurs plus anciens et avec les caractères UTF-16 comme ????.
Cela devrait être la solution la plus compatible. Cependant, elle est moins performante qu’une boucle for
.
J'ai généré l'expression régulière à l'aide de regexpu
var str = 'My String ???? ';
var regEx = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g
str.replace(regEx, function (char) {
console.log(char)
});
J'espère que cela t'aides!
Dans le JavaScript d'aujourd'hui, vous pouvez
Array.prototype.map.call('This is my string', (c) => c+c)
Évidemment, c + c représente tout ce que vous voulez faire avec c.
Cela retourne
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ",
"mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
Si vous souhaitez animer chaque personnage, vous devrez peut-être l'envelopper dans un élément span;
var $demoText = $("#demo-text");
$demoText.html( $demoText.html().replace(/./g, "<span>$&</span>").replace(/\s/g, " "));
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);