반응형
다음과 같은 원본 배열이 있다고 가정하자.
const originalArray = [
[1, 2, 3, 4, 5, 6],
[7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
];
이 배열을 전치(transpose)해서 아래의 배열을 얻어보자.
[
[ 1, 7, 13 ],
[ 2, 8, 14 ],
[ 3, 9, 15 ],
[ 4, 10, 16 ],
[ 5, 11, 17 ],
[ 6, 12, 18 ]
]
코드는 다음과 같다.
const transpose = (array) => {
const rows = array.length;
const cols = array[0].length;
const transposedArray = [];
for (let j = 0; j < cols; j++) {
transposedArray[j] = [];
}
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
transposedArray[c][r] = array[r][c];
}
}
return transposedArray;
}
const originalArray = [
[1, 2, 3, 4, 5, 6],
[7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18],
];
let transposedArray = transpose(originalArray);
console.log(transposedArray);
console.log("============================");
console.log(transpose(transposedArray)); // = originalArray
출력 결과는 다음과 같다.
[
[ 1, 7, 13 ],
[ 2, 8, 14 ],
[ 3, 9, 15 ],
[ 4, 10, 16 ],
[ 5, 11, 17 ],
[ 6, 12, 18 ]
]
============================
[
[ 1, 2, 3, 4, 5, 6 ],
[ 7, 8, 9, 10, 11, 12 ],
[ 13, 14, 15, 16, 17, 18 ]
]
위의 코드는 다음과 같이 한 줄로 처리할 수 있다.
const transpose = (array) => {
return array[0].map((_, colIndex) => array.map((row) => row[colIndex]));
};
반응형
'개발 > JavaScript' 카테고리의 다른 글
자바스크립트 - 2차원 배열 빈 행 / 열 추가, 삭제하기 (0) | 2024.04.10 |
---|---|
자바스크립트 - 길이가 같은 두 배열을 합치기 (Zip Array using Currying) (0) | 2024.03.15 |
자바스크립트 - 2차원 배열에서 중복된 행 제거하기 (0) | 2024.03.07 |
자바스크립트 - HTML 태그를 제거하고 텍스트만 추출하기 (Remove HTML Tags and Extract Text) (0) | 2024.01.26 |
자바스크립트 - 객체에 존재하는 속성만 덮어쓰기 (0) | 2023.09.02 |
댓글