문제 상황
다음과 같은 불리언 배열의 배열(2차원 배열)이 있다고 가정해 보겠습니다.
const arr = [[true,false,false],[false,false,false],[false,false,true]];
각 하위 배열의 같은 위치에 있는 요소들을 OR(||) 연산자로 결합하여, 이 배열을 하나의 1차원 배열로 병합하는 함수를 작성해야 합니다.
해결 방법: Array.prototype.reduce() 활용
이 문제는 Array.prototype.reduce() 메서드를 사용하면 깔끔하게 해결할 수 있습니다. reduce()는 배열을 순회하면서 누적값(acc)을 만들어 가기 때문에, 여러 개의 배열을 하나로 합치는 작업에 특히 적합합니다.
예제 코드
const arr = [[true,false,false],[false,false,false],[false,false,true]];
const orMerge = arr => {
return arr.reduce((acc, val) => {
val.forEach((bool, ind) => acc[ind] = acc[ind] || bool);
return acc;
}, []);
};
console.log(orMerge(arr));
코드 동작 원리
reduce()의 초기값으로 빈 배열[]을 지정합니다.- 각 하위 배열(
val)을 순회하며forEach로 현재 값(bool)과 인덱스(ind)를 가져옵니다. acc[ind] || bool연산을 통해 기존 누적값과 현재 값을 OR 결합합니다. 따라서 해당 위치의 값 중 하나라도true이면 최종 결과도true가 됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ true, false, true ]