Chcę przekonwertować liczbę całkowitą na jej odpowiednik znakowy na podstawie alfabetu. Na przykład:
0 => a
1 => b
2 => c
3 => d
itp. Mógłbym zbudować tablicę i po prostu ją wyszukać, kiedy jej potrzebuję, ale zastanawiam się, czy jest wbudowana funkcja, która zrobi to za mnie. Wszystkie przykłady, które znalazłem za pośrednictwem Google, działają z wartościami ASCII, a nie z pozycją znaku w alfabecie.
javascript
integer
alphabet
VIVA LA NWO
źródło
źródło
Odpowiedzi:
Zakładając, że chcesz mieć małe litery:
97 to kod ASCII dla małych liter „a”. Jeśli chcesz używać wielkich liter, zamień 97 na 65 (wielkie litery „A”). Zwróć uwagę, że jeśli
n > 25
wyjdziesz z zakresu liter.źródło
Będzie bardziej przenośny w przypadku rozszerzenia na inne alfabety:
lub, aby być bardziej kompatybilnym (z naszym ukochanym IE):
źródło
String.fromCharCode
moim zdaniem, jak powiedziałeś, bardzo łatwo się rozciąga.[]
w łańcuchach.[]
ciągów znaków jest obsługiwana w IE od IE8 w górę (IE8 w trybie zgodności z IE7 również nie działa),String.prototype.chatAt
jest preferowana zamiast[]
zgodności z przeglądarką. Np.'foo'.charAt(0) == 'f'
[]
akcesor właściwości w łańcuchach jest ustandaryzowany w ECMAScript 5 (patrz [[GetOwnProperty]] (P) ).Jeśli nie masz nic przeciwko odzyskiwaniu wieloznakowych ciągów, możesz obsługiwać dowolne dodatnie indeksy:
(Niezupełnie przetestowane pod kątem błędów precyzji :)
źródło
function idOf(i) { return (i >= 26 ? idOf(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; }
Prosta odpowiedź brzmiałaby (26 znaków):
Jeśli miejsce jest cenne, możesz wykonać następujące czynności (20 znaków):
Pomyśl, co mógłbyś zrobić z tymi wszystkimi dodatkowymi bajtami!
Jak to działa, konwertujesz liczbę do podstawy 36, więc masz następujące znaki:
Poprzez przesunięcie o 10 znaki zaczynają się od
a
zamiast0
.Nie jestem jednak do końca pewien, jak szybko działałyby dwa różne przykłady po stronie klienta.
źródło
JavaScript String.fromCharCode (kod1, kod2, ..., kodN) przyjmuje nieskończoną liczbę argumentów i zwraca ciąg liter, których odpowiadające wartości ASCII to kod1, kod2, ... kodN. Ponieważ 97 to „a” w ASCII, możemy dostosować indeksowanie, dodając 97 do indeksu.
źródło
Nie podobają mi się wszystkie rozwiązania wykorzystujące magiczne liczby, takie jak
97
lub36
.zakłada to wielkie litery i zaczyna się od „A” od 0.
źródło
Użyj
String.fromCharCode
. Zwraca ciąg z wartości Unicode, która pasuje do pierwszych 128 znaków ASCII.źródło
Proszę bardzo: (a-zA-Z)
input: 0-51, lub zwróci false (błąd zakresu);
LUB:
zwraca wartość undefined w przypadku błędu zakresu. UWAGA: tablica zostanie utworzona tylko raz i ze względu na zamknięcie będzie dostępna dla nowej funkcji codeToChar. Myślę, że jest to nawet szybsze niż pierwsza metoda (w zasadzie to tylko wyszukiwanie).
źródło
Jedynym problemem ze świetnym rozwiązaniem @ mikemaccana jest to, że używa operatora binarnego >>, który jest kosztowny, jeśli chodzi o wydajność. Proponuję tę modyfikację jego wspaniałej pracy jako drobne ulepszenie, które może być łatwiejsze dla Twoich kolegów.
Lub jako jednowierszowy
Przykład:
źródło
Próbować
Pokaż fragment kodu
źródło
Zakładając, że chcesz mieć duże litery:
Przykład:
numberToLetter ('023') to ["A", "C", "D"]
numberToLetter ('5') to „F”
źródło