Daher wurde meine Frage hier von einer anderen Person in Java-Form gestellt: Java - Erstellen Sie eine neue String-Instanz mit der angegebenen Länge und dem angegebenen Zeichen. Beste Lösung?
. . . aber ich suche nach seinem JavaScript-Äquivalent.
Grundsätzlich möchte ich Textfelder dynamisch mit "#" Zeichen füllen, basierend auf dem Attribut "maxlength" jedes Felds. Wenn also eine Eingabe vorhanden ist maxlength="3"
, wird das Feld mit "###" gefüllt.
Im Idealfall gibt es so etwas wie Java StringUtils.repeat("#", 10);
, aber bisher ist die beste Option, die ich mir vorstellen kann, das Durchlaufen und Anhängen der "#" - Zeichen nacheinander, bis die maximale Länge erreicht ist. Ich kann das Gefühl nicht loswerden, dass es einen effizienteren Weg gibt, dies zu tun.
Irgendwelche Ideen?
Zu Ihrer Information - Ich kann nicht einfach einen Standardwert in der Eingabe festlegen, da die "#" Zeichen im Fokus gelöscht werden müssen und, wenn der Benutzer keinen Wert eingegeben hat, bei Unschärfe "nachgefüllt" werden müssen. Es ist der "Nachfüll" -Schritt, mit dem ich mich befasse
quelle
Antworten:
Der beste Weg dies zu tun (den ich gesehen habe) ist
Dadurch wird ein Array mit der angegebenen Länge erstellt und anschließend mit der angegebenen Zeichenfolge verknüpft, um es zu wiederholen. Die
.join()
Funktion berücksichtigt die Array-Länge, unabhängig davon, ob den Elementen Werte zugewiesen wurden, und undefinierte Werte werden als leere Zeichenfolgen gerendert.Sie müssen der gewünschten Länge 1 hinzufügen, da die Trennzeichenfolge zwischen den Array-Elementen liegt.
quelle
parseInt()
den Wert für die maximale Länge der Eingänge zu verwenden, bevor ich ihn zur Größe des Arrays verwendete. Genau das, wonach ich gesucht habe. . . Vielen Dank!repeat
Funktion in String.prototype integriert jetzt (ES6 +)Probieren Sie es aus: P.
quelle
_.repeat('*',10);
repeat()
Methode unterstützt. Ich freue mich auf den Tag, an dem ich mich nicht mehr um sie kümmern muss. . .Obwohl der hier erwähnte Array.join-Ansatz knapp ist, ist er leider etwa 10-mal langsamer als eine auf String-Verkettung basierende Implementierung. Es funktioniert besonders schlecht bei großen Saiten. Siehe unten für vollständige Leistungsdetails.
Unter Firefox, Chrome, Node.js MacOS, Node.js Ubuntu und Safari war die schnellste Implementierung, die ich getestet habe:
Dies ist ausführlich. Wenn Sie also eine knappe Implementierung wünschen, können Sie sich für den naiven Ansatz entscheiden. Es bietet immer noch eine 2- bis 10-fache Leistung zwischen dem Array.join-Ansatz und ist außerdem schneller als die Verdopplungsimplementierung für kleine Eingaben. Code:
Weitere Informationen:
quelle
Ich würde eine konstante Zeichenfolge erstellen und dann Teilzeichenfolge darauf aufrufen.
Etwas wie
Ein bisschen schneller auch.
http://jsperf.com/const-vs-join
quelle
ES2015 ist der einfachste Weg, so etwas zu tun
'X'.repeat(data.length)
X
eine beliebige Zeichenfolge sein,data.length
die gewünschte Länge.Siehe: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
quelle
Eine gute ES6-Option wäre
padStart
eine leere Zeichenfolge. So was:Hinweis: Dies funktioniert im IE nicht (ohne Polyfill).
quelle
s = '#'.repeat(10)
Gibt es einen besonderen Grund, warum Sie diesen ES6-Ansatz gegenüber dem anderen ( ) aus der obigen Antwort von @ user4227915 empfehlen würden ?Version, die in allen Browsern funktioniert
Diese Funktion macht, was Sie wollen, und arbeitet viel schneller als die in der akzeptierten Antwort vorgeschlagene Option:
Sie verwenden es so:
Um die Leistung dieser Funktion mit der der in der akzeptierten Antwort vorgeschlagenen Option zu vergleichen, finden Sie Benchmarks in dieser Geige und dieser Geige .
Version nur für moderne Browser
In modernen Browsern können Sie jetzt auch Folgendes tun:
Diese Option ist noch schneller. Leider funktioniert es in keiner Version des Internet Explorers.
Die Zahlen in der Tabelle geben die erste Browserversion an, die die Methode vollständig unterstützt:
quelle
Sie können auch eine Polyfill für Repeat für ältere Browser hinzufügen
quelle
Basierend auf Antworten von Hogan und Zero Trick Pony. Ich denke, dies sollte schnell und flexibel genug sein, um die meisten Anwendungsfälle gut zu bewältigen:
quelle
Sie können die erste Zeile der Funktion als Einzeiler verwenden, wenn Sie möchten:
quelle