JavaScript로 2차원 배열의 전치(Transpose) 구현하기
이번 글에서는 2차원 배열을 인자로 받아 그 전치(transpose) 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.
여기서 전치란 행렬의 행과 열을 서로 맞바꾸는 연산을 의미합니다. 즉, 원본 배열의 각 행은 결과 배열에서 열로 변환되고, 각 열은 행으로 변환됩니다.
방법 1: Array.prototype.forEach() 사용
forEach() 메서드를 이중으로 사용하여 바깥 배열과 내부 배열을 순회하면서, 각 요소의 위치를 행과 열 기준으로 뒤바꿔 새로운 배열에 담는 방식입니다.
const arr = [
[0, 1],
[2, 3],
[4, 5]
];
const transpose = arr => {
const res = [];
arr.forEach((el, ind) => {
el.forEach((elm, index) => {
res[index] = res[index] || [];
res[index][ind] = elm;
});
});
return res;
};
console.log(transpose(arr));방법 2: Array.prototype.reduce() 사용
reduce() 메서드를 활용하면 누적값(acc)을 이용해 더 함수형 프로그래밍 스타일로 전치 배열을 만들 수 있습니다. 내부 동작 원리는 forEach() 버전과 동일합니다.
const arr = [
[0, 1],
[2, 3],
[4, 5]
];
const transpose = arr => {
let res = [];
res = arr.reduce((acc, val, ind) => {
val.forEach((el, index) => {
acc[index] = acc[index] || [];
acc[index][ind] = el;
});
return acc;
}, [])
return res;
};
console.log(transpose(arr));위 두 가지 방법 모두 실행하면 콘솔에 아래와 같은 결과가 출력됩니다.
[ [ 0, 2, 4 ], [ 1, 3, 5 ] ]