2013-05-27 4 views
8

come faccio a scorrere un elenco dall'inizio alla fine usando _.each in underscore?come eseguire iterazioni su un elenco di elementi dall'ultimo elemento al primo utilizzando il carattere di sottolineatura?

lister = ['a', 'c', 'd', 'w', 'e']; 
_.each(_.range(lister.length, 0 ,-1), function (val,i) { 
    console.log(val); 
}, lister); 

questo stampa numero 5 a 1 in console. È una buona idea usare il carattere di sottolineatura _.each al posto della tradizione "for" loop?

risposta

8

Solo reverse the array prima di iterare su di esso?

lister.reverse(); 

Per rispondere alla tua domanda _.each() vs for loop, have a look here.

+13

cambierà la matrice, quindi ha un serio svantaggio di solo iterare in ordine inverso – user2846569

7

Underscore non ti dà un modo per scorrere in senso inverso una raccolta, solo avanti. L'inversione dell'array risolve il problema tanto quanto l'inversione del modo in cui gli elementi sono messi nell'array.

Una possibile soluzione per il movimento in senso inverso sta cadendo di nuovo al normale Javascript:

for (var i = arr.length; i-- > 0;) 
0

Tutte queste risposte sarà mutare la matrice che non è quello che vuole fare, a meno che non si desidera aggiungere un altro .reverse() ogni volta che lo esegui.

Ma poiché Oyu stanno usando loDash si può facilmente evitare questo avvolgendo la matrice all'interno di un clone o cloneDeep all'interno di ogni() chiamata

var letterArray = [ 'a', 'b', 'c', 'd', 'e' ]; 
_.each(_.clone(letterArray).reverse(), function(v, i) { 
    console.log(i+1); 
}); 

questo registrerà 5, 4, 3, 2, 1 senza influenzare l'array originale.