275 votes

Chaîne de répétition - Javascript

Quelle est la méthode la plus efficace ou la plus concise pour renvoyer une chaîne de caractères répétée un nombre arbitraire de fois ?

Ce qui suit est mon meilleur essai jusqu'à présent :

function repeat(s, n){
    var a = [];
    while(a.length < n){
        a.push(s);
    }
    return a.join('');
}

5 votes

Il y a plus de 10 ans, j'ai trouvé une solution bien connue à ce problème, que j'ai utilisée comme exemple dans un article sur l'optimisation du JavaScript quelques mois avant que vous ne posiez cette question : webreference.com/programmation/javascript/jkm3/3.html Apparemment, la plupart des gens ont oublié ce code, et je ne vois pas de solution aussi bonne que la mienne. Le meilleur algorithme semble avoir été repris de mon code ; sauf qu'en raison d'une mauvaise compréhension du fonctionnement de mon code, il effectue une étape supplémentaire de concaténation exponentielle qui est éliminée dans mon code original par une boucle spéciale.

0 votes

Veuillez essayer cette comparaison et envisager de remplacer la réponse acceptée par la solution de longue date à ce problème, publiée avant même que cette question ne soit posée. jsperf.com/repeating-strings

11 votes

Personne n'a levé la solution de Joseph. L'algorithme a 3700 ans. Le coût de cette étape supplémentaire est négligeable. En outre, le coût de l'étape supplémentaire est négligeable. cet article contient des erreurs et des idées fausses concernant la concaténation de chaînes de caractères en Javascript. Pour toute personne intéressée par la manière dont Javascript gère réellement les chaînes de caractères en interne, voir Corde .

1voto

Mitranim Points 71

Les gens compliquent les choses à l'extrême ou gaspillent les performances. Tableaux ? La récursivité ? Vous devez vous moquer de moi.

function repeat (string, times) {
  var result = ''
  while (times-- > 0) result += string
  return result
}

Editer. J'ai effectué quelques tests simples pour comparer avec la version bitwise postée par artistoex / disfated et un tas d'autres personnes. Cette dernière n'était que marginalement plus rapide, mais beaucoup plus économe en mémoire. Pour 1000000 répétitions du mot "blah", le processus Node a atteint 46 mégaoctets avec l'algorithme de concaténation simple (ci-dessus), mais seulement 5,5 mégaoctets avec l'algorithme logarithmique. Ce dernier est sans aucun doute la meilleure solution. Je le republie par souci de clarté :

function repeat (string, times) {
  var result = ''
  while (times > 0) {
    if (times & 1) result += string
    times >>= 1
    string += string
  }
  return result
}

1voto

George Zafiris Points 974

Concaténation de chaînes de caractères sur la base d'un nombre.

function concatStr(str, num) {
   var arr = [];

   //Construct an array
   for (var i = 0; i < num; i++)
      arr[i] = str;

   //Join all elements
   str = arr.join('');

   return str;
}

console.log(concatStr("abc", 3));

J'espère que cela vous aidera !

1voto

wizzfizz94 Points 292

Avec ES8, vous pouvez également utiliser padStart o padEnd pour cela, par exemple.

var str = 'cat';
var num = 23;
var size = str.length * num;
"".padStart(size, str) // outputs: 'catcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcatcat'

1voto

saigowthamr Points 366

Pour répéter une chaîne de caractères un certain nombre de fois, nous pouvons utiliser la fonction intégrée repeat() en JavaScript.

Voici un exemple qui répète 4 fois la chaîne de caractères suivante :

const name = "king";

const repeat = name.repeat(4);

console.log(repeat);

Sortie :

"kingkingkingking"

ou nous pouvons créer notre propre version de repeat() comme suit :

function repeat(str, n) {
  if (!str || !n) {
    return;
  }

 let final = "";
  while (n) {
    final += s;
    n--;
  }
  return final;
}

console.log(repeat("king", 3))

(initialement publié à l'adresse suivante https://reactgo.com/javascript-repeat-string/ )

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