Existe-t-il un moyen en Javascript d'écrire facilement quelque chose comme ça:
[1,2,3].times do {
something();
}
Une bibliothèque qui pourrait prendre en charge une syntaxe similaire peut-être?
Mise à jour: pour clarifier - je voudrais something()
être appelé 1, 2 et 3 fois respectivement pour chaque itération d'élément de tableau
javascript
jquery
underscore.js
BreakPhreak
la source
la source
Réponses:
Cette réponse est basée sur
Array.forEach
, sans aucune bibliothèque, juste de la vanille native .Pour appeler essentiellement
something()
3 fois, utilisez:considérant la fonction suivante:
L'outpout sera
Pour répondre à ces questions, voici une façon d'appeler respectivement
something()
1, 2 et 3 fois:Nous sommes en 2017, vous pouvez utiliser ES6:
ou dans le bon vieux ES5:
Dans les deux cas, la sortie sera
L'outpout sera
(une, puis deux, puis 3 fois)
la source
something
n'est appelée que 3 fois, il devrait être appelé 6 fois.[...Array(i)]
ouArray(i).fill()
, en fonction de vos besoins pour les index réels..forEach(something)
Utilisez simplement une boucle:
la source
Alternative ES6 possible.
Et, si vous voulez qu'il "soit appelé respectivement 1, 2 et 3 fois".
Mettre à jour:
Pris à partir de remplissage-tableaux-avec-undefined
Cela semble être une façon plus optimisée de créer le tableau initial, j'ai également mis à jour cela pour utiliser la deuxième fonction de mappage de paramètres suggérée par @ felix-eve.
la source
Array.from(Array(3)).forEach(something)
Array.from()
a un deuxième paramètre facultatifmapFn
, qui vous permet d'exécuter une fonction de carte sur chaque élément du tableau, il n'est donc pas nécessaire d'utiliser forEach. Vous pouvez simplement faire:Array.from({length: 3}, () => somthing() )
Depuis que vous mentionnez Underscore:
En supposant que
f
la fonction que vous souhaitez appeler est:fera l'affaire. Par exemple, avec
f = function (x) { console.log(x); }
, vous obtiendrez sur votre console:0 0 1 0 1 2
la source
_(3).times(function(n){return n;});
devrait faire l'affaire. Consultez la documentation ici.Avec lodash :
Ou si vous voulez faire quelque chose N fois :
Reportez-vous à ce lien pour l'
lodash
installationla source
Créez un tableau et
fill
tous les éléments avec la méthodeundefined
somap
pourrait fonctionner:Utilisation de la boucle de révères à l'ancienne:
la source
Vous pouvez également faire la même chose avec la déstructuration comme suit
ou si vous avez besoin d'index
la source
Si vous ne pouvez pas utiliser Underscorejs, vous pouvez l'implémenter vous-même. En attachant de nouvelles méthodes aux prototypes Number et String, vous pouvez le faire comme ceci (en utilisant les fonctions fléchées ES6):
Vous devez simplement créer une expression de fonction (quel que soit le nom) et l'assigner au nom de propriété (sur les prototypes) auquel vous souhaitez accéder en tant que:
la source
Il existe une bibliothèque fantastique appelée Ramda, qui est similaire à Underscore et Lodash, mais qui est plus puissante.
Ramda contient de nombreuses fonctions utiles. Voir la documentation Ramda
la source
Vous pouvez utiliser la longueur du tableau pour exécuter le nombre de fois votre tâche.
ou
la source
vous pouvez utiliser
Array.forEach
exemple:
ou avec jQuery
http://api.jquery.com/jQuery.each/
la source
forEach
n'est pris en charge que dans IE à partir de la version 9: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Vous pouvez l'appeler comme ceci:
la source
et
ou (via https://stackoverflow.com/a/20066663/275501 )
la source
Utilisation de jQuery
.each()
OU
ÉDITER
Vous pouvez faire comme ci-dessous avec pur JS:
la source
Utilisez simplement une boucle imbriquée (peut-être incluse dans une fonction)
Alors appelez-le comme ceci:
la source
Ces réponses sont toutes bonnes et bien et IMO @Andreas est la meilleure, mais plusieurs fois dans JS, nous devons faire les choses de manière asynchrone, dans ce cas, async vous a couvert:
http://caolan.github.io/async/docs.html#times
Ces fonctionnalités «temps» ne sont pas très utiles pour la plupart des codes d'application, mais devraient être utiles pour les tests.
la source
la source
Étant donné une fonction
something
:Et une nouvelle méthode
times
ajoutée auArray
prototype:Ce code:
Sort ceci:
Ce qui, je pense, répond à votre question mise à jour (5 ans plus tard) mais je me demande à quel point il est utile d'avoir ce travail sur un tableau? L'effet ne serait-il pas le même que celui d'appeler
[6].times(something)
, qui à son tour pourrait s'écrire:(bien que l'utilisation de
_
comme variable indésirable réduira probablement le lodash ou le soulignement si vous l'utilisez)la source
let
comme dansfor (let _ of Array(6)) something()
pour éviter le clobbering lodash en dehors de la pendant au moins.Tableau. De (ES6)
Utilisez-le comme ceci:
Ou
Ou
la source
Utilisation
Array.from
et.forEach
.la source
En supposant que nous pouvons utiliser une syntaxe ES6 comme l'opérateur de propagation, nous voudrons faire quelque chose autant de fois que la somme de tous les nombres de la collection.
Dans ce cas, si temps est égal à
[1,2,3]
, le nombre total de fois sera de 6, soit 1 + 2 + 3.Cet article devrait être utile si la logique derrière la construction et la diffusion d'un tableau n'est pas apparente.
la source
Implémentation TypeScript:
Pour ceux d'entre vous qui sont intéressés par la façon de mettre en œuvre
String.times
etNumber.times
d'une manière qui est sûre de type et fonctionne avec lethisArg
, voilà:Un lien vers le TypeScript Playground avec quelques exemples peut être trouvé ici
Cet article met en œuvre des solutions postées par: Andreas Bergström , vinyll , Ozay Duman et SeregPie
la source