2012-04-13 3 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 = _.map(a, b, function(x, y){ return x + y;}) 

그러나 : 직관적

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

, 그것은해야 밑줄의 구문 같은 느낌 인수 목록을 사용할 수 없습니다. 두 번째 매개 변수는 호출 가능한 함수라고 가정합니다.

선택적 "컨텍스트"인수는이 상황에서 도움이되지 않습니다.

답변

14

zip (또한 밑줄 .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

+0

도움이 돼 주셔서 감사합니다. –

+0

@ icyrock.com'a'와'b' 배열의 값을 ** Strings로 바꿀 때 ** Underscore의'_.zip' 함수는 값 대신 ** 배열의 길이를 저장합니다. 이거 확인할 수 있니? 동일한 시나리오를 어떻게 구현하겠습니까?하지만 Integers 대신 String을 사용 하시겠습니까? – JJD

관련 문제