748

Perl では、次の構文を使用して文字を複数回繰り返すことができます。

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

Javascriptでこれを達成する簡単な方法はありますか? 私は明らかに関数を使用できますが、組み込みのアプローチやその他の巧妙な手法があるかどうか疑問に思っていました。

4

24 に答える 24

1466

最近では、repeat文字列メソッドはほとんどどこにでも実装されています。( Internet Explorer にはありません。) したがって、古いブラウザーをサポートする必要がない限り、次のように書くだけです。

"a".repeat(10)

以前repeatは、次のハックを使用していました。

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

(長さ 11 の配列は、配列要素の間Array.joinに引数を配置するため、10 個の "a" しか得られないことに注意してください。)

Simon はまた、このベンチマークによると、for ループを使用して単に文字を追加するだけで、Safari と Chrome (ただし Firefox ではない) で文字を複数回繰り返す方が高速であるように見えることも指摘しています (ただし、少し簡潔ではありません)。

于 2009-12-09T22:49:23.723 に答える
312

新しい ES6 ハーモニーでは、これを繰り返すためのネイティブな方法があります。また、ES6 は現在実験的なものであり、この機能はEdge、FF、Chrome、および Safari で既に利用可能です。

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

そして確かにリピート機能が利用できない場合は、古き良きものを使用できますArray(n + 1).join("abc")

于 2014-05-02T21:16:52.223 に答える
54

何度も繰り返す場合に便利です。

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)  )

于 2009-12-10T02:50:40.710 に答える
13

最もパフォーマンスに優れた方法はhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeatです

ショートバージョンは以下。

  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));

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;
  }
}
于 2014-10-27T13:05:09.813 に答える
6
/**  
 * 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"
);
于 2013-05-09T02:29:00.917 に答える
4

n 文字をすばやく繰り返すもう 1 つの興味深い方法は、高速累乗アルゴリズムのアイデアを使用することです。

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;
};
于 2015-01-06T12:17:45.920 に答える
2

私のプロジェクトで値を繰り返すには、繰り返しを使用します

例えば:

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

ただし、このメソッドは ECMAScript 6 仕様に追加されているため注意してください。

于 2016-03-09T12:12:54.883 に答える
2
function repeatString(n, string) {
  var repeat = [];
  repeat.length = n + 1;
  return repeat.join(string);
}

repeatString(3,'x'); // => xxx
repeatString(10,''); // => ""
于 2017-03-16T03:35:36.383 に答える
0

@bonbon's answerを拡張します。彼の方法は、誰かがそれを行う必要がある場合に備えて、「既存の文字列に N 文字を追加する」簡単な方法です。たとえば、「a google」は 1 の後に 100 個のゼロが続くためです。

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>

注:元の文字列の長さを条件に追加する必要があります。

于 2015-04-25T07:02:37.510 に答える
0

Lodashは、すべてのブラウザーで利用できるわけではないJavascript の repeat()関数と同様の機能を提供します。これは_.repeatと呼ばれ、バージョン 3.0.0 以降で利用できます。

_.repeat('a', 10);
于 2016-12-13T17:23:02.997 に答える
-1
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"
于 2016-10-24T01:18:18.483 に答える