2012-04-13 15 views
9

Zasadniczo chcę wyrazić następujące zachowanie przy użyciu _.each() lub _.map() w pliku Underscore.js.Czy jest możliwe iterowanie na dwóch listach jednocześnie w pliku 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] 

Jest to z pewnością możliwe w Matlab (mój język podstawowy) jako takie:

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

Intuicyjnie czuje się jak składni w podkreślenia powinno być:

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

jednak, że lista argumentów jest niedopuszczalna; drugi parametr ma być funkcją wywoływalną.

Opcjonalny argument "kontekst" nie pomoże mi w tej sytuacji.

Odpowiedz

14

Użyj do tego celu zip (również z underscore.js). Coś takiego:

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] 

przykład robocza:

+1

Dzięki mnóstwo! To było naprawdę pomocne. – mrjoelkemp

+0

Pewnie, cieszę się, że mogę Ci pomóc! –

+0

@ icyrock.com Kiedy zamieniam wartości w tablicach 'a' i' b' z ** Ciągami ** Funkcja podkreślenia '_.zip' przechowuje ** długość tablicy ** zamiast wartości. Czy możesz to potwierdzić? Jak zaimplementować ten sam scenariusz, ale z ciągami zamiast liczb całkowitych? – JJD

Powiązane problemy