Gostaria de alertar cada letra individual de uma string, mas não tenho certeza de como fazer isso.
Então, se eu tiver:
var str = 'This is my string';
Eu gostaria de poder alertar separadamente T, h, i, s, etc. Este é apenas o começo de uma idéia em que estou trabalhando, mas preciso saber como processar cada letra separadamente.
Eu quero usar jQuery e estava pensando que talvez eu precise usar a função de divisão depois de testar qual é o comprimento da string.
Ideias?
javascript
jquery
string
Nic Hubbard
fonte
fonte
for(const c of str) { ... }
. Mais adiante, em uma resposta bastante detalhada, mas não suficientemente votada. PS: O link do @ ARJUN não funciona para mim.Respostas:
Se a ordem dos alertas for importante, use o seguinte:
Se a ordem dos alertas não importar, use o seguinte:
Mostrar snippet de código
fonte
[]
para obter o caractere em uma posição específica não é suportado no IE <9charAt
é deixado nos dias UCS-2, quando não havia pares substitutos e, para resolver o problema, uma nova funçãocodepointAt
foi adicionada ao JavaScript que lida com nossa pilha amigável de cocô corretamente. Eu acredito que Java também tem.Provavelmente está mais do que resolvido. Só quero contribuir com outra solução simples:
fonte
[...text].forEach(console.log)
forEach()
passa o índice e a matriz como segundo e terceiro argumento. Eu preferiria não registrar isso ..for (let c of [...text]) { console.log(c) }
let c of text
já faz o trabalho.Uma solução possível em javascript puro:
fonte
Como processar cada letra do texto (com referências)
https://jsperf.com/str-for-in-of-foreach-map-2para
Clássico e de longe aquele com mais desempenho . Você deve optar por este caso esteja planejando usá-lo em um algoritmo de desempenho crítico ou se exija a máxima compatibilidade com as versões do navegador.
para de
for ... of é o novo ES6 para iterador. Suportado pela maioria dos navegadores modernos. É visualmente mais atraente e menos propenso a erros de digitação. Se você optar por este em um aplicativo de produção, provavelmente deverá usar um transpiler como o Babel .
para cada
Abordagem funcional . Airbnb aprovado . A maior desvantagem de fazer dessa maneira é a
split()
, que cria uma nova matriz para armazenar cada letra individual da string.ou
A seguir, os que não gosto.
para ... em
Ao contrário de ... of, você obtém o índice de letras em vez da letra. Ele executa muito mal.
mapa
Abordagem de função, o que é bom. No entanto, o mapa não deve ser usado para isso. Deve ser usado quando for necessário alterar os valores dentro de uma matriz, o que não é o caso.
ou
fonte
for
loop clássico foi o segundo mais lento, enquantofor...of
o mais rápido (cerca de três vezes mais rápidofor
).for
loop sendo um pouco mais rápido.A maioria, se não todas, as respostas aqui estão erradas, pois elas serão interrompidas sempre que houver um caractere na cadeia de caracteres fora do BMP Unicode (Plano Multilíngue Básico) . Isso significa que todos os Emoji serão quebrados .
JavaScript usa UTF- 16 Unicode para todas as strings. No UTF-16, os caracteres além do BMP são compostos de duas partes, denominadas " Par Substituto " " e a maioria das respostas aqui processará cada parte desses pares individualmente, em vez de um único caractere.
Uma maneira no JavaScript moderno desde pelo menos 2016 é usar o novo iterador String . Aqui está o exemplo (quase) direto do MDN:
fonte
Você pode tentar isso
fonte
Mais uma solução ...
fonte
for..of
ciclofor (let ch of t) { alert(ch) }
Quando eu preciso escrever um código curto ou uma linha, eu uso este "hack":
Isso não contará novas linhas para que possa ser uma coisa boa ou ruim. Se você deseja incluir novas linhas, substitua:
/./
por/[\S\s]/
. Os outros one-liners que você pode ver, provavelmente, usar.split()
o que tem muitos problemasfonte
forEach
função da chamada versus os parâmetros enviadosreplace
. Se eu sei que sou ASCII, acho que ainda tenho alguns casos de usosplit
. Ótima resposta, no entanto!u
bandeira junto com ag
bandeira? OK, apenas testei e eu estava certo.O novo JS permite isso:
fonte
É melhor usar a instrução for ..., se a string contiver caracteres unicode, devido ao tamanho de byte diferente.
fonte
resposta curta:
Array.from(string)
fornecerá o que você provavelmente deseja e, em seguida, você pode iterá-lo ou o que quer que seja, já que é apenas uma matriz.ok, vamos tentar com esta string:
abc|⚫️\n⚪️|👨👩👧👧
.Os pontos de código são:
portanto, alguns caracteres têm um ponto de código (byte) e outros dois ou mais, e uma nova linha adicionada para testes extras.
então, após o teste, há duas maneiras:
fonte
Agora você pode iterar sobre pontos de código Unicode individuais contidos em uma String usando
String.prototype[@@iterator]
, que retorna um valor do tipo Symbol conhecidoSymbol.iterator
- o iterador padrão para Objetos semelhantes a matrizes (String
neste caso).Código de exemplo:
Isso funciona com caracteres Unicode, como emoji ou caracteres não romanos, que desarmariam construções herdadas.
Referência: Link MDN para String.prototype @@ iterator .
fonte
for ... of
loop e também sobre a string - que é o açúcar da sintaxe para acessar o iterador.Agora você pode usar em palavras-chave.
fonte
in
é uma parte legítima da linguagem. Use as coisas adequadamente. Seu artigo adverte quein
interpreta as teclas alfa da mesma forma que as teclas numéricas. Assim? Talvez seja isso que você quer. Também se pode dizer que outros métodos ignoram incorretamente as teclas alfa. Imo,of
tem comportamento correto. Nas matrizes JS, os elementos sem as teclas alfa ainda possuem as chaves: os numéricos. No meu console, JS "corretamente" trata a tecla alfa da mesma forma que as teclas numéricas:>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
Você pode obter uma matriz de caracteres individuais como esse
e, em seguida, faça um loop usando Javascript comum, ou você pode iterar os caracteres da string usando jQuery por
fonte
você pode converter essa sequência em uma matriz de caracteres usando e
split()
, em seguida, iterar através dela.fonte
Se você deseja fazer uma transformação no texto em um nível de personagem e recuperar o texto transformado no final, faça algo assim:
Então, as etapas:
fonte
No JavaScript de hoje, você pode
Array.prototype.map.call('This is my string', (c) => c+c)
Obviamente, c + c representa o que você quer fazer com c.
Isso retorna
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ", "mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
fonte
[...'This is my string'].map((c)=>c+c)
Isso deve funcionar em navegadores antigos e com caracteres UTF-16 como 💩.
Essa deve ser a solução mais compatível. No entanto, é menos eficiente que um
for
loop seria.Eu gerei a expressão regular usando regexpu
Espero que isto ajude!
fonte
Você pode acessar caracteres únicos com
str.charAt(index)
oustr[index]
. Mas a última maneira não faz parte do ECMAScript, portanto é melhor você optar pela primeira.fonte
Se você deseja animar cada caractere, pode ser necessário envolvê-lo no elemento span;
Eu acho que essa é a melhor maneira de fazer isso, depois processe os intervalos. (por exemplo, com TweenMax)
TweenMax.staggerFromTo ($ demoText.find ("span"), 0,2, {autoAlpha: 0}, {autoAlpha: 1}, 0,1);
fonte
Experimente este código
fonte