88 votes

Est-il possible d'obtenir l'index que vous parcourez dans Underscore.js?

J'utilise la bibliothèque JS Underscore et en particulier les appels _.each et _.sortby bibliothèque. Je me demande s'il est possible d'obtenir l'indice de la valeur au sein du délégué 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); });
 

163voto

osoner Points 1034

Index est effectivement disponible comme;

 _.sortBy([1, 4, 2, 66, 444, 9], function(num, index){  });
 

82voto

jabclab Points 5545

Vous pouvez obtenir l'index de l'itération en cours en ajoutant un autre paramètre à votre itérateur function , par exemple

 _.each(['foo', 'bar', 'baz'], function (val, i) {
    console.log(i + ": " + val); // 0: foo, 1: bar, 2: baz
});
 

19voto

Martin Dow Points 2161

Si vous préférez transformer votre tableau, le iterator paramètre de underscore map fonction est également passé l'index comme second argument. Alors:

 _.map([1, 4, 2, 66, 444, 9], function(value, index){ return index + ':' + value; });
 

... résultats:

 ["0:1", "1:4", "2:2", "3:66", "4:444", "5:9"]
 

10voto

janith Points 845

L'itérateur de _.each est appelé avec 3 paramètres (element, index, list) . Alors oui, pour _.each vous obtenez l’indice.

Vous pouvez faire la même chose en triBy

1voto

George Jempty Points 3660

Plus généralement, dans la plupart des cas, le trait de soulignement fonctions qui prend une liste et un argument que les deux premiers arguments, de donner accès à la liste d'index que le dernier argument de l'itérateur. Cette distinction est importante quand il s'agit de deux soulignent fonctions, _.réduire et _.reduceRight, qui prennent note " comme troisième argument, dans le cas de ces deux l'index ne sera pas le deuxième argument, mais le troisième:

var destination = (function() {
    var fields = ['_333st', 'offroad', 'fbi'];
    return _.reduce(waybillInfo.destination.split(','), function(destination, segment, index) {
        destination[fields[index]] = segment;
        return destination;
    }, {});
})();

console.log(destination);            
/*
_333st: "NYARFTW  TX"
fbi: "FTWUP"
offroad: "UP"

The following is better of course but not demonstrate my point:
var destination = _.object(['_333st', 'offroad', 'fbi'], waybillInfo.destination.split(','));
*/

Donc, si vous vouliez vous pourriez obtenir l'index à l'aide de souligner lui-même: _.last(_.initial(arguments)). Une exception possible (je n'ai pas essayé)_.carte, car il peut prendre un objet au lieu d'une liste: "Si la liste est un objet JavaScript, iterator les arguments de l'est (en valeur, la clé de la liste)." - voir: http://underscorejs.org/#map

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X