860 Stimmen

Wiederholen Sie eine Zeichenfolge in JavaScript eine bestimmte Anzahl von Malen

In Perl kann ich ein Zeichen mehrmals wiederholen, indem ich die Syntax verwende:

$a = "a" x 10; // Ergebnis: "aaaaaaaaaa"

Gibt es eine einfache Möglichkeit, dies in Javascript zu erreichen? Ich kann offensichtlich eine Funktion verwenden, aber ich frage mich, ob es einen integrierten Ansatz oder eine andere clevere Technik gibt.

1643voto

Jason Orendorff Punkte 39655

In diesen Tagen wird die repeat-Methode für Strings fast überall implementiert. (Sie ist nicht im Internet Explorer verfügbar.) Also, wenn Sie ältere Browser nicht unterstützen müssen, können Sie einfach folgendes schreiben:

"a".repeat(10)

Vor repeat haben wir diesen Trick verwendet:

Array(11).join("a") // einen String mit 10 a's erstellen: "aaaaaaaaaa"

(Bitte beachten Sie, dass ein Array der Länge 11 Ihnen nur 10 "a"s liefert, da Array.join das Argument zwischen die Array-Elemente platziert.)

Simon weist auch darauf hin, dass es laut diesem Benchmark anscheinend schneller ist in Safari und Chrome (aber nicht in Firefox), ein Zeichen mehrmals durch einfaches Anhängen in einer Schleife zu wiederholen (obwohl es etwas weniger kompakt ist).

6 Stimmen

Außerdem können Sie anstelle einer festen Länge eine Variable verwenden - Array(20-len), um einen String auf 20 Zeichen aufzufüllen.

9 Stimmen

Die Schleifenmethode kann schneller sein, aber sie ist ausführlicher. Außerdem bin ich verwirrt über all die Upvotes für den ersten Kommentar, wenn man bedenkt, dass dies im Allgemeinen nützlich sein wird, wenn die Array-Länge variabel ist, z.B. Array(rawValue.length + 1).join("*")

0 Stimmen

Dies funktioniert nicht im Fall von 0 und 1, da sie identische Ergebnisse liefern.

324voto

Salvador Dali Punkte 197375

In einer neuen ES6-Harmonie gibt es einen nativen Weg, dies mit repeat zu tun. Auch wenn ES6 im Moment nur experimentell ist, ist dieses Feature bereits verfügbar in Edge, FF, Chrome und Safari

"abc".repeat(3) // "abcabcabc"

Und sicherlich, wenn die repeat-Funktion nicht verfügbar ist, können Sie das alte Array(n + 1).join("abc") verwenden

57voto

kennebec Punkte 98551

Bequem, wenn Sie sich häufig wiederholen:

String.prototype.repeat = String.prototype.repeat || function(n){
  n= n || 1;
  return Array(n+1).join(this);
}

alert(  'Sind wir schon da?\nNein.\n'.repeat(10)  )

57 Stimmen

Es ist eine schlechte Codierungspraxis, die Prototypen von eingebauten Funktionen zu verschmutzen.

4 Stimmen

@nurettin siehe programmers.stackexchange.com/questions/104320/… für weitere Diskussionen. Ich würde eine (angemessen abgegrenzte) statische Hilfsfunktion hinzufügen, mit einer Signatur von repeat(str, n).

6 Stimmen

Ich würde den n = n || 1 Teil entfernen (oder überprüfen, ob n undefiniert ist), damit du auch 0 Mal wiederholen kannst.

19voto

Grzegorz Pawlik Punkte 2148
Array(10).fill('a').join('')

Auch wenn die am meisten gewählte Antwort etwas kompakter ist, mit diesem Ansatz muss man kein zusätzliches Array-Element hinzufügen.

1 Stimmen

Leider wird die fill-Methode in IE nicht unterstützt, und wenn Sie nicht IE-kompatibel sind, können Sie genauso gut die repeat-Methode verwenden.

1 Stimmen

Warum würdest du die Methode fill() verwenden, wenn du dasselbe nur mit join("a") tust...

3 Stimmen

Diese Antwort ist nützlich, wenn Sie einen Trennzeichen möchten.

15voto

bonbon Punkte 223

Eine Alternative ist:

for(var word = ''; word.length < 10; word += 'a'){}

Wenn Sie mehrere Zeichen wiederholen müssen, multiplizieren Sie Ihre Bedingung:

for(var word = ''; word.length < 10 * 3; word += 'foo'){}

HINWEIS: Sie müssen nicht um 1 überschreiten wie bei word = Array(11).join('a')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X