J'utilise la bibliothèque JS Underscore et en particulier les appels de bibliothèque _.each
et _.sortby
. Je me demande s'il existe un moyen possible d'obtenir l'index de la valeur dans le délégué d'itérateur
_.sortBy([1, 4, 2, 66, 444, 9], function(num){
/*It'd be great to have access to the index in here */
return Math.sin(num);
});
javascript
underscore.js
contactmatt
la source
la source
sortBy
partir de la version 4.17.4, ce qui est probablement plus utile à savoir dans ce scénario.Vous pouvez obtenir l'index de l'itération courante en ajoutant un autre paramètre à votre itérateur
function
, par exemplela source
Si vous préférez transformer votre tableau, le
iterator
paramètre de lamap
fonction de soulignement est également passé à l'index comme deuxième argument. Alors:... Retour:
la source
L'itérateur de
_.each
est appelé avec 3 paramètres(element, index, list)
. Alors oui, pour_.each
vous, obtenez l'index.Vous pouvez faire la même chose dans sortBy
la source
Je pense qu'il vaut la peine de mentionner comment le _.each () du Underscore fonctionne en interne. _.Each (list, iteratee) vérifie si la liste passée est un objet tableau ou un objet.
Dans le cas où la liste est un tableau, les arguments iteratee seront un élément de liste et un index comme dans l'exemple suivant:
D'un autre côté, si l'argument de la liste est un objet, l'itération prendra un élément de liste et une clé:
Pour référence, c'est le code _.each () de Underscore.js 1.8.3
la source
Plus généralement, dans la plupart des cas, les fonctions de soulignement qui prennent une liste et un argument comme deux premiers arguments, donnent accès à l'index de la liste en tant qu'avant-dernier argument de l'itérateur. Il s'agit d'une distinction importante en ce qui concerne les deux fonctions de soulignement, _.reduce et _.reduceRight, qui prennent 'memo' comme troisième argument - dans le cas de ces deux, l'index ne sera pas le deuxième argument, mais le troisième:
Donc , si vous vouliez vous pourriez obtenir l'index à l' aide underscore lui - même:
_.last(_.initial(arguments))
. Une exception possible (je n'ai pas essayé) est _.map, car il peut prendre un objet au lieu d'une liste: "Si list est un objet JavaScript, les arguments de l'itérateur seront (valeur, clé, liste)." - voir: http://underscorejs.org/#mapla source
Lorsqu'elles sont disponibles, je crois que la plupart des fonctions de tableau lodash afficheront l'itération. Mais le tri n'est pas vraiment une itération de la même manière: lorsque vous êtes sur le numéro 66, vous ne traitez pas le quatrième élément du tableau tant qu'il n'est pas terminé. Une fonction de tri personnalisée parcourra un tableau plusieurs fois, poussant les nombres adjacents vers l'avant ou vers l'arrière, jusqu'à ce que tout soit à sa place.
la source