Élargissement La solution de P.Bailey :
String.prototype.repeat = function(num) {
return new Array(isNaN(num)? 1 : ++num).join(this);
}
De cette manière, vous serez à l'abri des types d'arguments inattendus :
var foo = 'bar';
alert(foo.repeat(3)); // Will work, "barbarbar"
alert(foo.repeat('3')); // Same as above
alert(foo.repeat(true)); // Same as foo.repeat(1)
alert(foo.repeat(0)); // This and all the following return an empty
alert(foo.repeat(false)); // string while not causing an exception
alert(foo.repeat(null));
alert(foo.repeat(undefined));
alert(foo.repeat({})); // Object
alert(foo.repeat(function () {})); // Function
EDIT : Crédits à jerone pour son élégance ++num
idée !
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.