Eu quero converter um número inteiro em seu caractere equivalente com base no alfabeto. Por exemplo:
0 => a
1 => b
2 => c
3 => d
Eu poderia criar uma matriz e apenas procurá-la quando precisar, mas estou me perguntando se há uma função integrada para fazer isso por mim. Todos os exemplos que encontrei no Google estão trabalhando com valores ASCII e não com a posição de um caractere no alfabeto.
javascript
integer
alphabet
VIVA LA NWO
fonte
fonte
Respostas:
Supondo que você queira letras minúsculas:
97 é o código ASCII para minúsculas 'a'. Se você quiser letras maiúsculas, substitua 97 por 65 ('A' maiúsculo). Observe que
n > 25
, se você sair do intervalo de letras.fonte
Será mais portátil em caso de extensão para outros alfabetos:
ou, para ser mais compatível (com nosso amado IE):
fonte
String.fromCharCode
na minha opinião, como você disse, se estende com muita facilidade.[]
em strings.[]
acessador de propriedade nas strings é suportado no IE a partir do IE8 (o IE8 no modo compatível com o IE7 também não funciona),String.prototype.chatAt
é preferível em vez da[]
compatibilidade com o navegador. Por exemplo'foo'.charAt(0) == 'f'
[]
acessador de propriedades nas strings é padronizado no ECMAScript 5 (consulte [[GetOwnProperty]] (P) ).Se você não se importa em recuperar seqüências de vários caracteres, pode suportar índices positivos arbitrários:
(Não completamente testado para erros de precisão :)
fonte
function idOf(i) { return (i >= 26 ? idOf(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; }
Uma resposta simples seria (26 caracteres):
Se o espaço for precioso, você pode fazer o seguinte (20 caracteres):
Pense no que você poderia fazer com todos esses bytes extras!
Como isso funciona, você converte o número na base 36, para ter os seguintes caracteres:
Ao compensar por 10, os caracteres começam em
a
vez de0
.Não tenho muita certeza sobre a velocidade de execução dos dois exemplos diferentes do lado do cliente.
fonte
String.fromCharCode do Javascript (código1, código2, ..., códigoN) recebe um número infinito de argumentos e retorna uma sequência de letras cujos valores ASCII correspondentes são código1, código2, ... códigoN. Como 97 é 'a' em ASCII, podemos ajustar a sua indexação adicionando 97 ao seu índice.
fonte
Não gosto de todas as soluções que usam números mágicos como
97
ou36
.isso assume letras maiúsculas e inicia 'A' em 0.
fonte
Use
String.fromCharCode
. Isso retorna uma sequência de um valor Unicode, que corresponde aos primeiros 128 caracteres do ASCII.fonte
Lá vai você: (a-zA-Z)
entrada: 0-51, ou retornará falso (erro de intervalo);
OU:
retorna indefinido em caso de erro de intervalo. NOTA: a matriz será criada apenas uma vez e, devido ao fechamento, estará disponível para a nova função codeToChar. Eu acho que é ainda mais rápido que o primeiro método (é apenas uma pesquisa basicamente).
fonte
O único problema com a ótima solução do @ mikemaccana é que ele usa o operador binário >> que é caro, em termos de desempenho. Sugiro esta modificação ao seu excelente trabalho como uma ligeira melhoria que talvez seus colegas possam ler com mais facilidade.
Ou como uma linha
Exemplo:
fonte
Experimentar
Mostrar snippet de código
fonte
Supondo que você queira letras maiúsculas:
Exemplo:
numberToLetter ('023') é ["A", "C", "D"]
numberToLetter ('5') é "F"
fonte