do <quelque chose> N fois (syntaxe déclarative)
Est-il un moyen en Javascript pour écrire quelque chose comme ceci facilement:
[1,2,3].times do {
something();
}
Toute bibliothèque qui peuvent prendre en charge certains syntaxe similaire peut-être?
Mise à jour: à préciser - je voudrais something()
d'être appelé 1,2 et 3 fois respectivement pour chaque élément du tableau itération
- Je dirais qu'il y a pas de telle fonction en JS, et c'est un top 5 des fonctionnalités manquantes. Il est très utile pour tester le logiciel, plus que tout.
Vous devez vous connecter pour publier un commentaire.
Cette réponse est fondée sur
Array.forEach
, sans bibliothèque, il suffit de native la vanille.Essentiellement appel
something()
3 fois, utilisez:compte tenu de la fonction suivante:
L'outpout sera
Pour compléter cette question, voici une façon de faire appel
something()
1, 2 et 3 fois respectivement:C'est 2017, vous pouvez utiliser ES6:
ou dans le bon vieux ES5:
Dans les deux cas, l'outpout sera
L'outpout sera
(une fois, puis deux, puis 3 fois)
something
est seulement appelé 3 fois, il devrait être appelé 6 fois.[...Array(i)]
ouArray(i).fill()
, en fonction de vos besoins pour l'index..forEach(something)
Il suffit d'utiliser une boucle:
Possible ES6 alternative.
Et, si vous le voulez "pour être appelé 1,2 et 3 fois respectivement".
Mise à jour:
Prises de remplissage-tableaux-avec-undefined
Ce qui semble être un plus, de façon à optimiser de la création de la table initiale.
map
etforEach
sont à la fois ES5Array.from
qui tombe sous l'ES6, et dans ce cas, la flèche fonctions sont vraiment inutiles. Elles sont simplement utilisées pour laconisme.Array.from(Array(3)).forEach(something)
Puisque vous parlez de trait de Soulignement:
En supposant
f
est la fonction que vous voulez l'appeler:fera l'affaire. Par exemple, avec
f = function (x) { console.log(x); }
, que vous obtiendrez sur votre console:0 0 1 0 1 2
_(times).(f)
fonctionne aussi bien_(3).times(function(n){return n;});
devrait faire l'affaire. Voir la documentation ici.Nous pouvons utiliser lodash à faire ce travail par:
Ou si vous voulez faire quelque chose de N fois:
Référence ce lien pour
lodash
installationSi vous ne pouvez pas utiliser Underscorejs, vous pouvez la mettre en œuvre vous-même. Par la fixation de nouvelles méthodes pour le Nombre et la Chaîne de prototypes, vous pouvez le faire comme ceci (à l'aide ES6 flèche fonctions):
Vous suffit simplement de créer une expression de fonction (quel que soit le nom) et l'attribuer à ce que le nom de propriété (sur les prototypes) vous souhaitez accéder comme:
Créer un Tableau et
de remplissage
tous les articles avecundefined
doncmap
méthode de travail:JS:
À l'aide de la vieille école vénère la boucle:
JS:
Vous pouvez utiliser la longueur de tableau à exécuter nombre de fois que votre tâche.
ou
vous pouvez utiliser
Tableau.forEach
exemple:
ou avec jQuery
http://api.jquery.com/jQuery.each/
forEach
est uniquement pris en charge dans IE à partir de la version 9: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...Vous pouvez l'appeler comme ceci:
et
(ou via https://stackoverflow.com/a/20066663/275501 )
À l'aide de jQuery
.each()
OU
MODIFIER
Vous pouvez faire comme ci-dessous avec de la pure JS:
Il ya une fantastique bibliothèque appelée Ramda, qui est similaire à un trait de Soulignement et Lodash, mais est de plus en plus puissants.
Ramda contient beaucoup de fonctions utiles. Voir Ramda documentation
Suffit d'utiliser une boucle imbriquée (peut-être enfermé dans une fonction)
Puis il suffit de l'appeler comme ceci:
Ces réponses sont toutes bonnes et bien et de l'OMI @Andreas est le meilleur, mais de nombreuses fois en JS que nous avons à faire les choses de manière asynchrone, dans ce cas, async vous a couvert:
http://caolan.github.io/async/docs.html#times
Ces "temps" caractéristiques arent très utile pour la plupart le code de l'application, mais devrait être utile pour les tests.
Tableau.à partir de (ES6)
L'utiliser comme ceci:
Ou
Ou
À l'aide de
Array.from
et.forEach
.JS:
En supposant que nous pouvons utiliser de l'ES6 syntaxe comme la propagation de l'opérateur, nous voulons faire quelque chose autant de fois que la somme de tous les numéros de la collection.
Dans ce cas, si le temps est égal à
[1,2,3]
, le nombre total de fois sera la 6, c'est à dire 1+2+3.Ce poste devrait être utile si la logique qui sous-tend la construction et la diffusion d'un tableau n'est pas évident.
Donné une fonction
something
:Et une nouvelle méthode
times
ajouté à laArray
prototype:Ce code:
Sorties ceci:
Qui je pense les réponses à vos questions à jour (5 ans plus tard), mais je me demande combien il est utile d'avoir ce travail sur un tableau? Ne serait pas l'effet sera le même que l'appel à la
[6].times(something)
, qui à son tour peut être écrite comme:(bien que l'utilisation de
_
comme une variable de courrier indésirable ne sera probablement tabasser lodash ou un trait de soulignement si vous l'utilisez)