Ich möchte jeden einzelnen Buchstaben einer Zeichenfolge benachrichtigen, bin mir aber nicht sicher, wie ich das tun soll.
Also, wenn ich habe:
var str = 'This is my string';
Ich möchte T, h, i, s usw. separat benachrichtigen können. Dies ist nur der Anfang einer Idee, an der ich arbeite, aber ich muss wissen, wie jeder Buchstabe separat verarbeitet wird.
Ich möchte jQuery verwenden und dachte, ich müsste möglicherweise die Split-Funktion verwenden, nachdem ich die Länge der Zeichenfolge getestet habe.
Ideen?
javascript
jquery
string
Nic Hubbard
quelle
quelle
for(const c of str) { ... }
. Mehr davon weiter unten in einer recht detaillierten, aber nicht ausreichend bewerteten Antwort. PS: @ ARJUNs Link funktioniert bei mir nicht.Antworten:
Wenn die Reihenfolge der Warnungen von Bedeutung ist, verwenden Sie Folgendes:
Wenn die Reihenfolge der Warnungen keine Rolle spielt, verwenden Sie Folgendes:
Code-Snippet anzeigen
quelle
[]
, um das Zeichen an eine bestimmte Position zu bringen, wird in IE <9charAt
ist von den UCS-2-Tagen übrig geblieben, als es keine Ersatzpaare gab, und um das Problem zu lösen,codepointAt
wurde JavaScript eine neue Funktion hinzugefügt, die unseren freundlichen Haufen Kot korrekt behandelt. Ich glaube, Java hat es auch.Es ist wahrscheinlich mehr als gelöst. Ich möchte nur mit einer anderen einfachen Lösung einen Beitrag leisten:
quelle
[...text].forEach(console.log)
forEach()
Übergibt den Index und das Array als zweites und drittes Argument. Ich würde das lieber nicht protokollieren ..for (let c of [...text]) { console.log(c) }
let c of text
macht den Job schon.Eine mögliche Lösung in reinem Javascript:
quelle
So verarbeiten Sie jeden Textbuchstaben (mit Benchmarks)
https://jsperf.com/str-for-in-of-foreach-map-2zum
Klassisch und bei weitem derjenige mit der höchsten Leistung . Sie sollten sich für diesen entscheiden, wenn Sie ihn in einem leistungskritischen Algorithmus verwenden möchten oder wenn er die maximale Kompatibilität mit Browserversionen erfordert.
für ... von
for ... of ist der neue ES6 für Iterator. Unterstützt von den meisten modernen Browsern. Es ist optisch ansprechender und weniger anfällig für Tippfehler. Wenn Sie diesen in einer Produktionsanwendung verwenden, sollten Sie wahrscheinlich einen Transpiler wie Babel verwenden .
für jedes
Funktionaler Ansatz. Airbnb genehmigt . Der größte Nachteil dabei ist
split()
, dass ein neues Array erstellt wird, in dem jeder einzelne Buchstabe der Zeichenfolge gespeichert wird.oder
Das Folgende sind diejenigen, die ich nicht mag.
für in
Im Gegensatz zu für ... von erhalten Sie den Buchstabenindex anstelle des Buchstabens. Es funktioniert ziemlich schlecht.
Karte
Funktionsansatz, der gut ist. Die Karte ist jedoch nicht dafür gedacht. Es sollte verwendet werden, wenn die Werte innerhalb eines Arrays geändert werden müssen, was nicht der Fall ist.
oder
quelle
for
Schleife tatsächlich die zweitlangsamste undfor...of
die schnellste (ungefähr dreimal so schnell wiefor
).for
Schleife etwas schneller ist.Die meisten, wenn nicht alle Antworten hier sind falsch, da sie unterbrochen werden, wenn sich ein Zeichen in der Zeichenfolge außerhalb des Unicode-BMP (Basic Multilingual Plane) befindet . Das bedeutet, dass alle Emoji kaputt sind .
JavaScript verwendet UTF- 16- Unicode für alle Zeichenfolgen. In UTF-16, Zeichen jenseits der BMP sind aus aus zwei Teilen, einem „genannt Surrogate Pair “ und die meisten Antworten hier wird verarbeiten jedes Teil solcher Paare einzeln statt als ein einzelnes Zeichen.
Eine Möglichkeit in modernem JavaScript seit mindestens 2016 ist die Verwendung des neuen String-Iterators . Hier ist das Beispiel (fast) direkt aus MDN:
quelle
Sie können dies versuchen
quelle
Noch eine Lösung ...
quelle
for..of
Schleife zu verwendenfor (let ch of t) { alert(ch) }
Wenn ich einen Kurzcode oder einen Einzeiler schreiben muss, verwende ich diesen "Hack":
Dies zählt keine Zeilenumbrüche, so dass dies eine gute oder eine schlechte Sache sein kann. Wenn Sie Zeilenumbrüche einfügen möchten, ersetzen Sie:
/./
durch/[\S\s]/
. Die anderen Einzeiler Sie sehen wahrscheinlich möglicherweise verwenden ,.split()
die viele Probleme hatquelle
forEach
möchte, die an die Funktion des Aufrufs übergeben werden, im Vergleich zu den gesendeten Parameternreplace
. Wenn ich weiß, dass ich ASCIIing bin, denke ich, dass ich noch einige Anwendungsfälle für habesplit
. Tolle Antwort!u
Flagge zusammen mit derg
Flagge hätte? OK, gerade getestet und ich hatte recht.New JS erlaubt dies:
quelle
Aufgrund der unterschiedlichen Bytegröße ist es besser, die Anweisung for ... of zu verwenden, wenn die Zeichenfolge Unicode-Zeichen enthält.
quelle
kurze Antwort:
Array.from(string)
gibt Ihnen, was Sie wahrscheinlich wollen, und dann können Sie darauf iterieren oder was auch immer, da es nur ein Array ist.ok lass es uns mit dieser Zeichenfolge versuchen :
abc|⚫️\n⚪️|👨👩👧👧
.Codepunkte sind:
Einige Zeichen haben also einen Codepunkt (Byte) und einige zwei oder mehr, und eine neue Zeile wurde für zusätzliche Tests hinzugefügt.
Nach dem Testen gibt es also zwei Möglichkeiten:
quelle
Sie können jetzt einzelne Unicode-Codepunkte durchlaufen, die in einem String enthalten sind, indem Sie
String.prototype[@@iterator]
einen Wert des bekannten Symboltyps zurückgebenSymbol.iterator
- den Standarditerator für Array-ähnliche Objekte (String
in diesem Fall).Beispielcode:
Dies funktioniert mit Unicode-Zeichen wie Emoji oder nicht-römischen Zeichen, die ältere Konstrukte auslösen würden.
Referenz: MDN-Link zu String.prototype @@ iterator .
quelle
for ... of
Schleife über der Zeichenfolge kürzer tun können - das ist Syntaxzucker für den Zugriff auf den Iterator.Sie können jetzt in Schlüsselwort verwenden.
quelle
in
ist ein legitimer Teil der Sprache. Verwenden Sie die Dinge angemessen. In Ihrem Artikel wird darauf hingewiesen, dass Alphatastenin
genauso wie Zifferntasten interpretiert werden. Damit? Vielleicht ist es das, was du willst. Man könnte auch sagen, dass andere Methoden Alpha-Schlüssel fälschlicherweise ignorieren. Imo,of
hat korrektes Verhalten. In JS-Arrays haben Elemente ohne Alpha-Schlüssel weiterhin Schlüssel: numerische. In meiner Konsole behandelt JS die Alpha-Taste "korrekt" wie die Zifferntasten:>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
Sie können ein Array der einzelnen Zeichen wie folgt erhalten
und dann eine Schleife mit normalem Javascript ausführen, oder Sie können die Zeichen der Zeichenfolge mit jQuery von durchlaufen
quelle
Sie können diese Zeichenfolge mithilfe von in ein Array von Zeichen konvertieren
split()
und dann durchlaufen.quelle
Wenn Sie den Text auf Zeichenebene transformieren und den transformierten Text am Ende zurückerhalten möchten, gehen Sie folgendermaßen vor:
Also die Schritte:
quelle
Im heutigen JavaScript können Sie
Array.prototype.map.call('This is my string', (c) => c+c)
Offensichtlich steht c + c für alles, was Sie mit c machen möchten.
Dies kehrt zurück
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ", "mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
quelle
[...'This is my string'].map((c)=>c+c)
Dies sollte in älteren Browsern und mit UTF-16-Zeichen wie 💩 funktionieren.
Dies sollte die am besten kompatible Lösung sein. Es ist jedoch weniger performant als eine
for
Schleife.Ich habe den regulären Ausdruck mit regexpu generiert
Hoffe das hilft!
quelle
Sie können mit oder auf einzelne Zeichen zugreifen . Der letztere Weg ist jedoch nicht Teil von ECMAScript, daher sollten Sie sich besser für den ersteren entscheiden.
str.charAt(index)
str[index]
quelle
Wenn Sie jedes Zeichen animieren möchten, müssen Sie es möglicherweise in ein span-Element einschließen.
Ich denke, dies ist der beste Weg, dies zu tun und dann die Spannweiten zu verarbeiten. (zum Beispiel mit TweenMax)
TweenMax.staggerFromTo ($ demoText.find ("span"), 0,2, {autoAlpha: 0}, {autoAlpha: 1}, 0,1);
quelle
Versuchen Sie diesen Code
quelle