2012-04-13 37 views
9

我基本上想在Underscore.js中使用_.each()_.map()表示以下行爲。是否可以在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] 

這在Matlab(我的主要語言),因此是絕對有可能的:

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

直覺,感覺就像在強調語法應該是:

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

然而,參數列表不可接受;第二個參數應該是一個可調用函數。

在這種情況下,可選的「context」參數不會幫助我。

回答

14

使用zip(也來自underscore.js)。事情是這樣的:

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] 

工作例如:

+1

由於一噸!這真的很有幫助。 – mrjoelkemp 2012-04-13 01:24:55

+0

當然,很樂意幫忙! – 2012-04-13 01:25:39

+0

@ icyrock.com當我用**字符串替換數組'a'和'b'中的值** Underscore的'_.zip'函數存儲數組**的**長度而不是值。你能證實這一點嗎?你將如何實現相同的場景,但使用字符串而不是整數? – JJD 2013-05-07 16:41:15