답변:
요즘 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"
. 그래서 나는 그것이 모든 경우에 효과가 있다고 생각합니다.
새로운 ES6 하모니에서는 반복 하여 기본 작업을 수행 할 수 있습니다 . 또한 ES6은 현재 실험용이므로 Edge, FF, Chrome 및 Safari에서 이미 사용할 수 있습니다 .
"abc".repeat(3) // "abcabcabc"
그리고 반복 기능을 사용할 수 없다면 구식을 사용할 수 있습니다. Array(n + 1).join("abc")
자신을 많이 반복하면 편리합니다.
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
내가 :) 2012 년을 쓸 때 내 포인트는 유효 생각 그래서 6 월에만 2015 년까지 확정되지 않았다 ES6에 추가되었습니다
가장 성능이 좋은 방법은 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);
이 기능의 성능과 허용 된 답변에서 제안 된 옵션의 성능을 비교하려면 이 Fiddle 및 이 Fiddle 에서 벤치 마크를 참조하십시오 .
최신 브라우저에서는 다음 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 사양에 추가되었으므로주의하십시오.
@ bonbon 's answer 에서 확장하겠습니다 . 그의 방법은 누군가가 그렇게해야 할 경우를 대비하여 "기존 문자열에 N 문자를 추가하는"쉬운 방법입니다. 예를 들어 "google"은 1 다음에 100이 0 이기 때문 입니다.
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);
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
현재 브라우저에 기본적으로 포함 된 내용을 덮어 씁니다 . 또한 왜 축소합니까? 한 줄에 모두 쓸 필요는 없습니다.