Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals

Lesezeit: 5 Minuten

Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Steve

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

$a = "a" x 10; // results in "aaaaaaaaaa"

Gibt es eine einfache Möglichkeit, dies in Javascript zu erreichen? Ich kann natürlich eine Funktion verwenden, aber ich habe mich gefragt, ob es einen eingebauten Ansatz oder eine andere clevere Technik gibt.

1646321714 826 Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Jason Orendorff

In diesen Tagen die repeat String-Methode ist implementiert schon fast überall, überallhin, allerorts. (Es ist nicht im Internetexplorer.) Wenn Sie also keine älteren Browser unterstützen müssen, können Sie einfach schreiben:

"a".repeat(10)

Vor repeathaben wir diesen Hack verwendet:

Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"

(Beachten Sie, dass ein Array der Länge 11 Ihnen nur 10 “a”s liefert, da Array.join bringt das Argument zwischen die Array-Elemente.)

Darauf weist Simon auch gem dieser Maßstabscheint es in Safari und Chrome (aber nicht in Firefox) schneller zu sein, ein Zeichen mehrmals zu wiederholen, indem einfach eine for-Schleife angehängt wird (wenn auch etwas weniger prägnant).

  • Außerdem können Sie eine Variable anstelle einer festen Länge verwenden – Array (20-len), sagen wir, um eine Zeichenfolge bis zu 20 aufzufüllen.

    – Johannes C

    28. Juni 2012 um 16:42 Uhr

  • Die Schleifenmethode ist möglicherweise schneller, aber ausführlicher. Außerdem bin ich verwirrt von all den 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 Array(rawValue.length + 1).join("*")

    – Sauerstoff

    30. Januar 2015 um 19:30 Uhr


  • Die Formel ist Array(n+1).join("a"). Wenn n = 0, wird die leere Zeichenfolge zurückgegeben, und wenn n = 1, wird zurückgegeben "a". Also ich denke es funktioniert auf alle Fälle.

    – Jason Orendorff

    6. Juni 2017 um 17:07 Uhr

  • @Bashir das ist richtig, IE unterstützt dies nicht: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Michael

    30. Mai 2018 um 9:33 Uhr

  • @Neel Das liegt daran, dass JS-Engines die Zeichenfolgenlänge begrenzen. In Chrome und Firefox liegt die Grenze bei 2^30 (etwa eine Milliarde). 10^12 ist eine Billion.

    – Jason Orendorff

    13. August 2019 um 13:18 Uhr

Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Salvador Dalí

In einer neuen ES6-Harmonie haben Sie dafür eine native Methode wiederholen. Auch ES6 ist derzeit nur experimentell, dieses Feature ist schon verfügbar in Edge, FF, Chrome und Safari

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

Und wenn die Wiederholungsfunktion nicht verfügbar ist, können Sie sicher alt-gut verwenden Array(n + 1).join("abc")

1646321715 940 Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
kennebec

Praktisch, wenn Sie sich oft wiederholen:

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

alert(  'Are we there yet?\nNo.\n'.repeat(10)  )

  • Es ist eine schlechte Programmierpraxis, die Prototypen von Builtins zu verunreinigen.

    – tuomassalo

    9. Februar 2012 um 0:57 Uhr

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

    – tuomassalo

    27. Mai 2013 um 8:25 Uhr

  • Ich würde die entfernen n= n || 1 Teil (oder prüfen Sie ggf n ist undefiniert), also kann man auch wiederholen 0 mal.

    – Chodorowicz

    9. Juli 2013 um 13:55 Uhr


  • Sehen Sie sich auch Mozillas offizielles Polyfill für ES6 an: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Eirik Birkeland

    11. Dezember 2015 um 7:08 Uhr


  • @ChrisV, String.repeat wurde erst in ES6 hinzugefügt, das erst im Juni 2015 fertiggestellt wurde. Ich denke also, dass mein Punkt gültig war, als ich ihn 2012 schrieb. 🙂

    – tuomassalo

    14. Oktober 2016 um 10:38 Uhr

1646321716 537 Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Bonbon

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 wie bei um 1 überschießen word = Array(11).join('a')

Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Konstantin Viktorow

Der leistungsmäßigste Weg ist https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat

Kurzversion ist unten.

  String.prototype.repeat = function(count) {
    if (count < 1) return '';
    var result="", pattern = this.valueOf();
    while (count > 1) {
      if (count & 1) result += pattern;
      count >>>= 1, pattern += pattern;
    }
    return result + pattern;
  };
  var a = "a";
  console.debug(a.repeat(10));

Polyfill von Mozilla:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str="" + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('repeat count must be non-negative');
    }
    if (count == Infinity) {
      throw new RangeError('repeat count must be less than infinity');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }
    // Ensuring count is a 31-bit integer allows us to heavily optimize the
    // main part. But anyway, most current (August 2014) browsers can't handle
    // strings 1 << 28 chars or longer, so:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('repeat count must not overflow maximum string size');
    }
    var rpt="";
    for (;;) {
      if ((count & 1) == 1) {
        rpt += str;
      }
      count >>>= 1;
      if (count == 0) {
        break;
      }
      str += str;
    }
    // Could we try:
    // return Array(count + 1).join(this);
    return rpt;
  }
}

  • Das ist gut, aber die neue native “Wiederholung” ist noch schneller und braucht keine Implementierung, trotzdem danke!

    – Goty-Metal

    2. Januar 2017 um 14:06 Uhr

  • können Sie die Bedeutung von erläutern count >>>= 1, pattern += pattern;? was ist das für eine aussage

    – Tsahi Asher

    3. April 2017 um 13:05 Uhr

  • Das ist also ein Polyfill für die native Wiederholung? Fügen Sie einfach ein hinzu if (!String.prototype.repeat) { zum Anfang u } bis zum Ende.

    – trlkly

    20. Juni 2017 um 23:23 Uhr

  • >>>= ist vorzeichenlose Rechtsverschiebungszuweisung (wie in count = count >>> 1) siehe: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Benutzer1441004

    21. Januar 2018 um 21:18 Uhr

Avada Theme Anpassung des Untermenus
Grzegorz Pawlik

Array(10).fill('a').join('')

Obwohl die Antwort mit den meisten Stimmen etwas kompakter ist, müssen Sie bei diesem Ansatz kein zusätzliches Array-Element hinzufügen.

  • Das ist gut, aber die neue native “Wiederholung” ist noch schneller und braucht keine Implementierung, trotzdem danke!

    – Goty-Metal

    2. Januar 2017 um 14:06 Uhr

  • können Sie die Bedeutung von erläutern count >>>= 1, pattern += pattern;? was ist das für eine aussage

    – Tsahi Asher

    3. April 2017 um 13:05 Uhr

  • Das ist also ein Polyfill für die native Wiederholung? Fügen Sie einfach ein hinzu if (!String.prototype.repeat) { zum Anfang u } bis zum Ende.

    – trlkly

    20. Juni 2017 um 23:23 Uhr

  • >>>= ist vorzeichenlose Rechtsverschiebungszuweisung (wie in count = count >>> 1) siehe: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

    – Benutzer1441004

    21. Januar 2018 um 21:18 Uhr

1646321720 152 Wiederholen Sie eine Zeichenfolge in JavaScript mehrmals
Nathan Gefahr

Wenn Sie nicht dagegen sind, eine Bibliothek in Ihr Projekt aufzunehmen, hat lodash eine Wiederholungsfunktion.

_.repeat('*', 3);
// → '***

https://lodash.com/docs#repeat

924840cookie-checkWiederholen Sie eine Zeichenfolge in JavaScript mehrmals

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy