이 좀 더 컴팩트 찾을 수 있습니다
a.map(function(v, i) { return v + b[i]; })
그것은 ES6에 더욱 컴팩트합니다
a.map((v, i) => v + b[i])
우리는 우리 자신의 버전을 쓸 수 있습니다
function mapTwo(arr1, arr2, fn, ctxt) {
return arr1.map(function(v, i) {
return fn.call(ctxt, v, arr2[i], i);
};
}
의
map
인 것입니다. 우리가 정말, 이제
많은 배열을 통해
map
하는 반복을 쓸 수 원한다면 14,이제 우리는,
mapTwo(a, b, function(v1, v2) { return v1 + v2; }))
와 함께 원래의 문제를 해결하거나 할 수 있습니다. 각 입력 배열에서 하나씩 값의 배열로 콜백을 호출합니다. sum
이
function sum(values) {
return values.reduce(function(result, val) { return result+val; });
}
우리는 또한보다 일반적인 함수를 작성할 수를 여기서 우리가
mapMany([a,b], sum);
을 할 수있는 지금
function mapMany(arrays, fn, ctxt) {
fn = fn.bind(ctxt);
return arrays[0].map(function(_, i) {
return fn(arrays.map(function(array) { return array[i]; }), i);
};
}
은 입력의 각 인덱스의 요소를 결합하는 zip
라고 배열을 배열로 반환하여 배열 배열을 반환합니다. 이제는 배열의 길이가 다른 경우를 처리 할 것입니다.
function zip(arrays) {
var result = [],
max = Math.max.apply(0, arrays.map(function(array) { return array.length; }));
for (var i=0; i<max; i++) {
result.push(arrays.map(function(array) { return array[i]; });
}
return result;
}
이제 우리는
zip([a,b]).map(sum)
와 쌍대 합계를 만들 수 있습니다