2012-04-13 26 views
9

Temel olarak, aşağıdaki davranışı Underscore.js içinde _.each() veya _.map() kullanarak ifade etmek istiyorum.Underscore.js'de iki listeden aynı anda yineleme yapılabilir mi?

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] 

Bu gibi Matlab (birincil dili) kesinlikle mümkündür: O,

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

Ancak: Sezgisel

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

, olması gerektiği alt çizgi içinde sözdizimi gibi hissediyor argüman listesi kabul edilemez; ikinci parametrenin, callable işlevi olması gerekiyordu.

İsteğe bağlı "içerik" argümanı bu durumda bana yardımcı olmaz.

cevap

14

Bunun için zip (ayrıca underscore.js'den) kullanın. Böyle bir şey:

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] 

Çalışma örneği:

+1

teşekkürler bir ton! Bu gerçekten yardımcı oldu. – mrjoelkemp

+0

Elbette, yardım etmekten memnunum! –

+0

@ icyrock.com ** Dizeleri ** ile "a" ve "b" dizilerinde yer alan değerleri değiştirdiğimde, "Alt çizgi" _.zip işlevi, ** değeri yerine ** dizisinin uzunluğunu saklar. Bunu doğrulayabilir misin? Aynı senaryonu nasıl uygularsınız, ancak Tamsayılar yerine Dizeler? – JJD

İlgili konular