Я хочу преобразовать целое число в его символьный эквивалент на основе алфавита. Например:
0 => a
1 => b
2 => c
3 => d
и т.д. Я мог бы создать массив и просто посмотреть его, когда мне это нужно, но мне интересно, есть ли встроенная функция, чтобы сделать это для меня. Все примеры, которые я нашел через Google, работают со значениями ASCII, а не с позицией символа в алфавите.
javascript
integer
alphabet
VIVA LA NWO
источник
источник
Ответы:
Предполагая, что вы хотите строчные буквы:
97 - это код ASCII для строчных букв «а». Если вам нужны заглавные буквы, замените 97 на 65 (заглавная 'A'). Обратите внимание, что если
n > 25
вы выйдете из диапазона букв.источник
Будет более переносимым в случае распространения на другие алфавиты:
или, чтобы быть более совместимым (с нашим любимым IE):
источник
String.fromCharCode
на мой взгляд, как вы уже сказали, оно распространяется очень легко.[]
для строк.[]
свойствам в строках поддерживается в IE от IE8 и выше (IE8 в режиме сравнения IE7 также не работает),String.prototype.chatAt
предпочтительнее, чем[]
для совместимости с браузером. Например'foo'.charAt(0) == 'f'
[]
свойствам в строках стандартизировано в ECMAScript 5 (см. [[GetOwnProperty]] (P) ).Если вы не против вернуть многосимвольные строки, вы можете поддерживать произвольные положительные индексы:
(Тщательно не проверено на точность ошибок :)
источник
function idOf(i) { return (i >= 26 ? idOf(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; }
Простой ответ будет (26 символов):
Если пространство драгоценно, вы можете сделать следующее (20 символов):
Подумайте, что вы могли бы сделать со всеми этими дополнительными байтами!
Как это работает, вы конвертируете число в базу 36, поэтому у вас есть следующие символы:
При смещении на 10 символы начинаются с
a
вместо0
.Не совсем уверен в том, насколько быстрым будет выполнение двух разных примеров на стороне клиента.
источник
String.fromCharCode Javascript (code1, code2, ..., codeN) принимает бесконечное количество аргументов и возвращает строку букв, соответствующие значения ASCII которых - code1, code2, ... codeN. Поскольку 97 - это «a» в ASCII, мы можем откорректировать вашу индексацию, добавив 97 в ваш индекс.
источник
Мне не нравятся все решения, которые используют магические числа, такие как
97
или36
.это предполагает заглавные буквы и начинается с «А» в 0.
источник
Использование
String.fromCharCode
. Это возвращает строку из значения Unicode, которое соответствует первым 128 символам ASCII.источник
Вот и вы: (a-zA-Z)
введите: 0-51, или он вернет false (ошибка диапазона);
ИЛИ:
возвращает неопределенное значение в случае ошибки диапазона. ПРИМЕЧАНИЕ: массив будет создан только один раз, и из-за закрытия он будет доступен для новой функции codeToChar. Я думаю, что это даже быстрее, чем первый метод (это просто поиск в принципе).
источник
Единственная проблема с отличным решением @ mikemaccana состоит в том, что он использует двоичный оператор >>, который является дорогостоящим, с точки зрения производительности. Я предлагаю эту модификацию его великой работы как небольшое улучшение, которое ваши коллеги, возможно, могут читать легче.
Или как однострочник
Пример:
источник
Пытаться
Показать фрагмент кода
источник
Предполагая, что вы хотите заглавные буквы:
Пример:
numberToLetter ('023') равно ["A", "C", "D"]
numberToLetter ('5') равно "F"
источник