回答:
最近、repeat
文字列メソッドはほとんどどこにでも実装されています。(これはInternet Explorerにはありません。)したがって、古いブラウザーをサポートする必要がない限り、次のように書くだけです。
"a".repeat(10)
以前はrepeat
、このハックを使用していました:
Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"
(長さが11の配列は、配列要素の間にArray.join
引数を置くため、10 "a"しか得られないことに注意してください。)
Simonはまた、このjsperfによると、SafariとChrome(Firefoxは除く)では、forループを使用して追加するだけで文字を複数回繰り返す方が高速であるように見えます(少し簡潔ですが)。
Array(rawValue.length + 1).join("*")
Array(n+1).join("a")
です。n = 0の場合は空の文字列を返し、n = 1の場合はを返します"a"
。だから私はそれがすべての場合にうまくいくと思います。
自分を何度も繰り返す場合に便利です。
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) )
repeat(str, n)
。
n= n || 1
パーツを削除する(またはn
が未定義かどうかを確認する)ので、繰り返し0
もできます。
String.repeat
はES6でのみ追加され、2015年6月まで確定されていませんでした。そのため、私の指摘は2012年に書いたときに有効だったと思います。:)
最もパフォーマンスに優れた方法は、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;
}
}
count >>>= 1, pattern += pattern;
。それはどんな声明ですか?
if (!String.prototype.repeat) {
最初と}
最後にを追加するだけです。
プロジェクトにライブラリを含めることに反対がない場合、lodashには繰り返し機能があります。
_.repeat('*', 3);
// → '***
次の関数は、承認された回答で提案されているオプションよりもはるかに高速に実行されます。
var repeat = function(str, count) {
var array = [];
for(var i = 0; i < count;)
array[i++] = str;
return array.join('');
}
次のように使用します。
var repeatedString = repeat("a", 10);
この関数のパフォーマンスを、承認済みの回答で提案されているオプションのパフォーマンスと比較するには、このフィドルとこのフィドルを参照してください、ベンチマークを。
最近のブラウザーでは、次のString.prototype.repeat
メソッドを使用してこれを実行できます。
var repeatedString = "a".repeat(10);
MDNでこのメソッドの詳細を読んでください。
このオプションはさらに高速です。残念ながら、これはInternet Explorerのどのバージョンでも機能しません。表の番号は、メソッドを完全にサポートする最初のブラウザバージョンを示しています。
/**
* 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"
);
ES2015 / ES6で使用できます "*".repeat(n)
これをプロジェクトに追加すれば、準備は完了です。
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())
};
n文字をすばやく繰り返す別の興味深い方法は、高速指数アルゴリズムのアイデアを使用することです。
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;
};
プロジェクトの値を繰り返すには、繰り返しを使用します
例えば:
var n = 6;
for (i = 0; i < n; i++) {
console.log("#".repeat(i+1))
}
ただし、このメソッドはECMAScript 6仕様に追加されているので注意してください。
私は上の拡大するつもりだボンボンの答え@。彼の方法は、誰かがそれを行う必要がある場合に備えて、「既存の文字列に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>
注:元の文字列の長さを条件に追加する必要があります。
Lodashは、JavaScriptのrepeat()関数と同様の機能を提供しますが、すべてのブラウザーで使用できるわけではありません。_.repeatと呼ばれ、バージョン3.0.0以降で使用できます。
_.repeat('a', 10);
これは、Array()とjoin()を使用して関数を呼び出し、結果を取得する方法です。
function repeatStringNumTimes(str, num) {
// repeat after me
return num > 0 ? Array(num+1).join(str) : "";
}
console.log(repeatStringNumTimes("a",10))
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"
String.prototype.repeat
は、現在のブラウザにネイティブに含まれているものを上書きします。また、なぜそれを縮小するのですか?すべてを1行で記述する必要はありません。