Repita o caractere N vezes

Em Perl eu posso repetir um personagem várias vezes usando a syntax:

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

Existe uma maneira simples de fazer isso em JavaScript? Obviamente, posso usar uma function, mas queria saber se havia alguma abordagem integrada ou alguma outra técnica inteligente.

    Atualmente, o método de string de repeat é implementado em quase todos os lugares. (Não está no Internet Explorer .) Portanto, a menos que você precise oferecer suporte a navegadores mais antigos, você pode simplesmente escrever:

     "a".repeat(10) 

    Antes de repeat , usamos esse hack:

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

    (Observe que uma matriz de tamanho 11 obtém apenas 10 “a” s, uma vez que Array.join coloca o argumento entre os elementos da matriz.)

    Simon também aponta que, de acordo com esse jsperf , parece que é mais rápido no Safari e no Chrome (mas não no Firefox) repetir um caractere várias vezes simplesmente anexando usando um loop for (embora um pouco menos conciso).

    Em uma nova harmonia ES6, você terá uma maneira nativa de fazer isso com a repetição . Também ES6 agora apenas experimental, esse recurso já está disponível no Edge, FF, Chrome e Safari

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

    E, certamente, se a function de repetição não estiver disponível, você poderá usar o Array(n + 1).join("abc") antigo bom Array(n + 1).join("abc")

    Conveniente se você se repetir muito:

     String.prototype.repeat= function(n){ n= n || 1; return Array(n+1).join(this); } alert('Are we there yet?\nNo.\n'.repeat(10)) 

    A maneira mais prática é a https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/repeat

    A versão curta está abaixo.

      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 da 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; } } 

    Uma alternativa é:

     for(var word = ''; word.length < 10; word += 'a'){} 

    Se você precisar repetir vários caracteres, multiplique seu condicional:

     for(var word = ''; word.length < 10 * 3; word += 'foo'){} 

    OBSERVAÇÃO: Você não precisa exceder em 1 como com word = Array(11).join('a')

    Se você não se opuser a include uma biblioteca em seu projeto, o lodash terá uma function de repetição.

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

    https://lodash.com/docs#repeat

    Para todos os navegadores

    A seguinte function será executada muito mais rapidamente que a opção sugerida na resposta aceita:

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

    Você usaria assim:

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

    Para comparar o desempenho desta function com o da opção proposta na resposta aceita, veja este violino e este violino para benchmarks.

    Apenas para navegadores modernos

    Nos navegadores modernos, você pode fazer isso usando o método String.prototype.repeat :

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

    Leia mais sobre este método no MDN .

    Esta opção é ainda mais rápida. Infelizmente, não funciona em nenhuma versão do Internet Explorer. Os números na tabela especificam a primeira versão do navegador que suporta totalmente o método:

    insira a descrição da imagem aqui

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

    Embora a resposta mais votada seja um pouco mais compacta, com essa abordagem você não precisa adicionar um item de matriz extra.

    No ES2015 / ES6 você pode usar "*".repeat(n) Repeat "*".repeat(n)

    Então, basta adicionar isso aos seus projetos, e você está pronto para ir.

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

    Outra maneira interessante de repetir rapidamente o caractere n é usar a ideia do algoritmo de exponenciação rápida:

     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; }; 
     /** * 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" ); 

    Para repetir um valor em meus projetos, uso repetir

    Por exemplo:

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

    mas tenha cuidado porque este método foi adicionado à especificação do ECMAScript 6.

    Aqui está o que eu uso:

     function repeat(str, num) { var holder = []; for(var i=0; i 
     function repeatString(n, string) { var repeat = []; repeat.length = n + 1; return repeat.join(string); } repeatString(3,'x'); // => xxx repeatString(10,'🌹'); // => "🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹" 

    Eu vou expandir a resposta do @bonbon . Seu método é uma maneira fácil de “append N caracteres a uma string existente”, para o caso de alguém precisar fazer isso. Por exemplo, uma vez que “um google” é um 1 seguido por 100 zeros .

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

    O Lodash oferece uma funcionalidade semelhante à function repeat () do Javascript, que não está disponível em todos os browers. É chamado _.repeat e disponível desde a versão 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); 

    Também pode ser usado como one-liner:

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

    Em CoffeeScript:

     ( '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" 

    Aqui está uma versão do ES6

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