Ich möchte eine Ganzzahl basierend auf dem Alphabet in ein Zeichenäquivalent umwandeln. Beispielsweise:
0 => a
1 => b
2 => c
3 => d
usw. Ich könnte ein Array erstellen und es einfach nachschlagen, wenn ich es brauche, aber ich frage mich, ob es eine eingebaute Funktion gibt, die dies für mich erledigt. Alle Beispiele, die ich über Google gefunden habe, arbeiten mit ASCII-Werten und nicht mit der Position eines Zeichens im Alphabet.
javascript
integer
alphabet
VIVA LA NWO
quelle
quelle
Antworten:
Angenommen, Sie möchten Kleinbuchstaben:
97 ist der ASCII-Code für Kleinbuchstaben 'a'. Wenn Sie Großbuchstaben möchten, ersetzen Sie 97 durch 65 (Großbuchstaben 'A'). Beachten Sie, dass
n > 25
Sie in diesem Fall den Buchstabenbereich verlassen.quelle
Wird tragbarer sein, wenn es auf andere Alphabete ausgedehnt wird:
oder um kompatibler zu sein (mit unserem geliebten IE):
quelle
String.fromCharCode
meiner Meinung nach, wie Sie sagten, erstreckt es sich sehr leicht.[]
für Zeichenfolgen nicht.[]
Eigenschaftenzugriff für Zeichenfolgen, wird im IE ab IE8 unterstützt (IE8 im IE7-Kompatibilitätsmodus funktioniert ebenfalls nicht) undString.prototype.chatAt
wird aus Gründen der[]
Browserkompatibilität anstelle von IE8 bevorzugt . ZB'foo'.charAt(0) == 'f'
[]
Eigenschaftszugriff auf Zeichenfolgen in ECMAScript 5 standardisiert ist (siehe [[GetOwnProperty]] (P) ).Wenn es Ihnen nichts ausmacht, Zeichenfolgen mit mehreren Zeichen zurückzugewinnen, können Sie beliebige positive Indizes unterstützen:
(Nicht gründlich auf Präzisionsfehler getestet :)
quelle
function idOf(i) { return (i >= 26 ? idOf(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; }
Eine einfache Antwort wäre (26 Zeichen):
Wenn Platz wertvoll ist, können Sie Folgendes tun (20 Zeichen):
Überlegen Sie, was Sie mit all diesen zusätzlichen Bytes machen könnten!
So konvertieren Sie die Zahl in Basis 36, sodass Sie die folgenden Zeichen haben:
Durch Versetzen um 10 beginnen die Zeichen bei
a
statt0
.Ich bin mir nicht ganz sicher, wie schnell die beiden verschiedenen Beispiele auf der Clientseite ausgeführt werden.
quelle
String.fromCharCode (Code1, Code2, ..., CodeN) von Javascript akzeptiert unendlich viele Argumente und gibt eine Buchstabenfolge zurück, deren entsprechende ASCII-Werte Code1, Code2, ... CodeN sind. Da 97 in ASCII 'a' ist, können wir Ihre Indizierung anpassen, indem wir 97 zu Ihrem Index hinzufügen.
quelle
Ich mag nicht alle Lösungen, die magische Zahlen wie
97
oder verwenden36
.Dies setzt Großbuchstaben voraus und beginnt 'A' bei 0.
quelle
Verwenden Sie
String.fromCharCode
. Dies gibt eine Zeichenfolge aus einem Unicode-Wert zurück, die den ersten 128 Zeichen von ASCII entspricht.quelle
Los geht's: (a-zA-Z)
Eingabe: 0-51, oder es wird false zurückgegeben (Bereichsfehler);
ODER:
Gibt im Falle eines Bereichsfehlers undefiniert zurück. HINWEIS: Das Array wird nur einmal erstellt und ist aufgrund des Schließens für die neue Funktion codeToChar verfügbar. Ich denke, es ist noch schneller als die erste Methode (im Grunde ist es nur eine Suche).
quelle
Das einzige Problem mit der großartigen Lösung von @ mikemaccana ist, dass der binäre >> Operator verwendet wird, der in Bezug auf die Leistung teuer ist. Ich schlage diese Änderung seiner großartigen Arbeit als leichte Verbesserung vor, die Ihre Kollegen vielleicht leichter lesen können.
Oder als Einzeiler
Beispiel:
quelle
Versuchen
Code-Snippet anzeigen
quelle
Angenommen, Sie möchten Großbuchstaben:
Beispiel:
numberToLetter ('023') ist ["A", "C", "D"]
numberToLetter ('5') ist "F"
quelle