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
}
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 .
4 votes
Personne ne semble avoir remarqué que String protoype repeat est défini et implémenté, au moins dans firefox.
3 votes
@kennebec : Oui, c'est une fonctionnalité d'EcmaScript 6 qui n'existait pas lorsque cette question a été posée. Elle est assez bien supportée maintenant.
3 votes
@rvighne - Je viens de vérifier kangax.github.io/compat-table/es6/#String.prototype.repeat Je ne considèrerais pas que le soutien apporté exclusivement par firefox et chrome soit "assez bien supporté"
1 votes
Comme l'indiquent le commentaire de Kennebec et la réponse d'André Laszlo, il s'agit d'ES6 :
'mystring'.repeat(xTimes)
1 votes
@brad Pourriez-vous changer la réponse acceptée en celui-ci , s'il vous plaît ?
0 votes
Bien sûr ! Je viens de le modifier.