Frage

In Perl kann ich ein Zeichen mehrmals wiederholen Sie die Syntax:

$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 frage mich, ob es eine in Ansatz gebaut oder eine andere clevere Technik.

Andere Tipps

In einer neuen ES6 Harmonie, werden Sie native Möglichkeit haben, dies zu tun mit bereits Rand, FF, Chrome und Safari

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

Und sicher, wenn Repeat-Funktion nicht zur Verfügung steht Sie alten guten Array(n + 1).join("abc") verwenden

Praktisch, wenn Sie sich viel 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)  )

Die meisten Performance-wice 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;
  }
}

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 als mit word = Array(11).join('a') überschreiten

Wenn Sie nicht entgegengesetzt sind eine Bibliothek in einem Projekt mit, lodash hat eine Wiederholungsfunktion.

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

https://lodash.com/docs#repeat

Für alle Browser

Die folgende Funktion wird viel schneller ausführen als die Option in der akzeptierten Antwort vorgeschlagen:

var repeat = function(str, count) {
    var array = [];
    for(var i = 0; i < count;)
        array[i++] = str;
    return array.join('');
}

Sie würde es wie folgt verwenden:

var repeatedString = repeat("a", 10);

Um die Leistung dieser Funktion mit der der in der akzeptierten Antwort vorgeschlagene Option vergleichen zu können, finden Sie unter diese Fiddle und dieses Fiddle Benchmarks.

Für Neueren Browser nur

In modernen Browsern können Sie nun diese mit String.prototype.repeat Methode tun:

var repeatedString = "a".repeat(10);

Weitere Informationen zu diesem Verfahren Lesen Sie auf MDN .

Diese Option ist noch schneller. Leider funktioniert es nicht in jeder Version von Internet Explorer. Die Zahlen in der Tabelle geben Sie die erste Browser-Version, die die Methode vollständig unterstützt:

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

Obwohl die meisten Stimmen Antwort ist ein wenig kompakter, mit diesem Ansatz müssen Sie keine zusätzliche Array-Element hinzufügen.

/**  
 * Repeat a string `n`-times (recursive)
 * @param {String} s - The string you want to repeat.
 * @param {Number} n - The times to repeat the string.
 * @param {String} d - A delimiter between each string.
 */

var repeat = function (s, n, d) {
    return --n ? s + (d || "") + repeat(s, n, d) : "" + s;
};

var foo = "foo";
console.log(
    "%s\n%s\n%s\n%s",

    repeat(foo),        // "foo"
    repeat(foo, 2),     // "foofoo"
    repeat(foo, "2"),   // "foofoo"
    repeat(foo, 2, "-") // "foo-foo"
);

In ES2015 / ES6 können Sie "*".repeat(n) verwenden

So einfach dies zu Ihren Projekten hinzufügen und Ihr sind gut zu gehen.

  String.prototype.repeat = String.prototype.repeat || 
    function(n) {
      if (n < 0) throw new RangeError("invalid count value");
      if (n == 0) return "";
      return new Array(n + 1).join(this.toString()) 
    };

Eine weitere interessante Art und Weise zu schnell repeat n Charakter Idee von einem schnellen Potenzierung Algorithmus verwenden:

var repeatString = function(string, n) {
    var result = '', i;

    for (i = 1; i <= n; i *= 2) {
        if ((n & i) === i) {
            result += string;
        }
        string = string + string;
    }

    return result;
};

Für Wiederholung ein Wert in meinen Projekten i Wiederholung verwenden

Zum Beispiel:

var n = 6;
for (i = 0; i < n; i++) {
    console.log("#".repeat(i+1))
}

aber vorsichtig sein, da dieses Verfahren auf die ECMAScript 6 Spezifikation hinzugefügt wurde.

Hier ist, was ich benutze:

function repeat(str, num) {
        var holder = [];
        for(var i=0; i<num; i++) {
            holder.push(str);
        }
        return holder.join('');
    }
function repeatString(n, string) {
  var repeat = [];
  repeat.length = n + 1;
  return repeat.join(string);
}

repeatString(3,'x'); // => xxx
repeatString(10,'🌹'); // => "🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹"

Ich werde auf @ bonbon Antwort erweitern. Seine Methode ist eine einfache Möglichkeit, „anhängen N Zeichen zu einem bestehenden String“, nur für den Fall, dass jemand, das zu tun braucht. Zum Beispiel, da "eine Google" ist eine 1 gefolgt von 100 Nullen .

for(var google = '1'; google.length < 1 + 100; google += '0'){}
document.getElementById('el').innerText = google;
<div>This is "a google":</div>
<div id="el"></div>

. Hinweis: Sie haben die Länge der ursprünglichen Zeichenfolge zu dem bedingten hinzuzufügen

Lodash bietet eine ähnliche Funktionalität wie die Javascript repeat () Funktion, die in allen Browsern verfügbar ist. Es heißt _.repeat und verfügbar seit Version 3.0.0:

_.repeat('a', 10);
var stringRepeat = function(string, val) {
  var newString = [];
    for(var i = 0; i < val; i++) {
      newString.push(string);
  }
  return newString.join('');
}

var repeatedString = stringRepeat("a", 1);

Kann als Einzeiler auch verwendet werden:

function repeat(str, len) {
    while (str.length < len) str += str.substr(0, len-str.length);
    return str;
}

In Coffee:

( 'a' for dot in [0..10]).join('')
String.prototype.repeat = function (n) { n = Math.abs(n) || 1; return Array(n + 1).join(this || ''); };

// console.log("0".repeat(3) , "0".repeat(-3))
// return: "000" "000"

Hier ist eine ES6 Version

const repeat = (a,n) => Array(n).join(a+"|$|").split("|$|");
repeat("A",20).forEach((a,b) => console.log(a,b+1))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top