2012-04-13 17 views
9

In sostanza, voglio esprimere il seguente comportamento utilizzando _.each() o _.map() in Underscore.js.È possibile iterare attraverso due elenchi contemporaneamente in Underscore.js?

a = [1, 2, 3] 
b = [3, 2, 1] 

# Result list 
c = [0, 0, 0] 

for i in [0 .. a.length - 1] 
    c[i] = a[i] + b[i] 

Questo è sicuramente possibile in Matlab (la mia lingua principale) in quanto tale:

c = arrayfun(@(x,y) x+y, a, b) 

Intuitivamente, ci si sente come la sintassi di sottolineatura dovrebbe essere:

c = _.map(a, b, function(x, y){ return x + y;}) 

Tuttavia, che la lista degli argomenti non è accettabile; il secondo parametro dovrebbe essere una funzione callable.

L'argomento opzionale "contesto" non mi aiuterà in questa situazione.

risposta

14

Usa zip (anche da underscore.js) per questo. Qualcosa di simile a questo:

var a = [1, 2, 3]; 
var b = [4, 5, 6]; 
var zipped = _.zip(a, b); 
// This gives you: 
// zipped = [[1, 4], [2, 5], [3, 6]] 

var c = _.map(zipped, function(pair) { 
    var first = pair[0]; 
    var second = pair[1]; 
    return first + second; 
}); 

// This gives you: 
// c = [5, 7, 9] 

esempio di lavoro:

+1

Grazie una tonnellata! E 'stato davvero d'aiuto. – mrjoelkemp

+0

Certo, felice di aiutare! –

+0

@ icyrock.com Quando sostituisco i valori negli array 'a' e' b' con ** Strings ** la funzione '_.zip' di Underscore memorizza la ** lunghezza dell'array ** anziché il valore. Puoi confermare questo? Come implementeresti lo stesso scenario ma con Stringhe al posto di Numeri interi? – JJD

Problemi correlati