808 votes

Répéter une chaîne en JavaScript un certain nombre de fois

En Perl, je peux répéter un caractère plusieurs fois en utilisant la syntaxe :

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

Existe-t-il un moyen simple d'accomplir cela en Javascript ? Je peux évidemment utiliser une fonction, mais je me demandais s'il existait une approche intégrée ou une autre technique intelligente.

1569voto

Jason Orendorff Points 15869

Ces jours-ci, le repeat méthode des chaînes est mis en œuvre presque partout. (Il est pas dans Internet Explorer .) Ainsi, à moins que vous ne deviez prendre en charge des navigateurs plus anciens, vous pouvez simplement écrire :

"a".repeat(10)

Avant repeat on a utilisé cette astuce :

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

(Notez qu'un tableau de longueur 11 ne vous donne que 10 "a", puisque Array.join met l'argument entre les éléments du tableau).

Simon souligne également que, selon cette référence En ce qui concerne la répétition d'un caractère, il semble qu'il soit plus rapide dans Safari et Chrome (mais pas dans Firefox) de répéter un caractère plusieurs fois en l'ajoutant simplement à l'aide d'une boucle for (bien qu'un peu moins concis).

6 votes

De plus, vous pouvez utiliser une variable au lieu d'une longueur fixe - Array(20-len), par exemple pour compléter une chaîne jusqu'à 20.

8 votes

La méthode de la boucle est peut-être plus rapide mais elle est plus verbeuse. De plus, je suis perplexe face à tous les votes positifs pour le premier commentaire, étant donné que cette méthode est généralement utile lorsque la longueur du tableau est variable, par ex. Array(rawValue.length + 1).join("*")

0 votes

Cela ne fonctionne pas dans le cas de 0 et 1, car ils produisent des résultats identiques.

317voto

Salvador Dali Points 11667

Dans une nouvelle harmonie ES6, vous aurez un moyen natif de le faire avec répéter . De plus, ES6 n'est pour l'instant qu'expérimental, cette fonctionnalité est déjà disponible dans Edge, FF, Chrome et Safari

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

Et bien sûr, si la fonction de répétition n'est pas disponible, vous pouvez utiliser le bon vieux Array(n + 1).join("abc")

56voto

kennebec Points 33886

Pratique si vous vous répétez souvent :

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

56 votes

C'est une mauvaise pratique de codage que de polluer les prototypes des builtins.

3 votes

@nurettin voir programmeurs.stackexchange.com/questions/104320/ pour plus de discussion. J'ajouterais une fonction d'aide statique (dont la portée est correcte), avec une signature de repeat(str, n) .

4 votes

J'enlèverais le n= n || 1 (ou vérifier si n est indéfini), vous pouvez donc également répéter 0 temps.

13voto

bonbon Points 37

Une alternative est :

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

Si vous devez répéter plusieurs caractères, multipliez votre conditionnel :

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

NOTE : Vous ne devez pas dépasser de 1 comme avec word = Array(11).join('a')

6voto

yckart Points 7517
/**  
 * 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"
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X