다음과 같이 true와 false 값으로 이루어진 2차원 배열(배열의 배열)이 있다고 가정해 보겠습니다.
const arr = [[true,false,false],[false,false,false],[false,false,true]];
여기서 필요한 것은 각 하위 배열에서 같은 위치에 있는 요소들을 AND(&&) 연산자로 결합하여, 이 배열의 배열을 하나의 1차원 배열로 병합하는 함수입니다.
접근 방법
이 문제는 Array.prototype.reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. reduce()는 배열을 순회하면서 누적값(accumulator)을 만들어 나가기 때문에, 첫 번째 하위 배열부터 마지막 하위 배열까지 차례대로 AND 연산을 적용하는 데 적합합니다.
동작 원리
- 초기 누적값으로 빈 배열(
[])을 설정합니다. - 각 하위 배열을
forEach로 순회하며 인덱스별 부울 값을 확인합니다. - 누적 배열의 해당 인덱스 값과 현재 값을
&&연산자로 결합합니다. acc[ind] && bool || false표현식은 두 값이 모두 참일 때만 참을 반환하고, 그렇지 않으면 항상false를 반환하도록 값을 정규화합니다.
예제 코드
const arr = [[true,false,false],[false,false,false],[false,false,true]];
const andMerge = (arr = []) => {
return arr.reduce((acc, val) => {
val.forEach((bool, ind) => {
acc[ind] = acc[ind] && bool || false;
});
return acc;
}, []);
};
console.log(andMerge(arr));실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[ false, false, false ]
결과를 살펴보면, 인덱스 0번째 자리는 true, false, false가 만나 false가 되고, 1번째 자리는 모두 false, 2번째 자리는 false, false, true가 만나 false가 됩니다. 따라서 최종 병합 결과는 [false, false, false]가 됩니다. 이처럼 AND 연산은 해당 위치의 모든 값이 true일 때만 true를 유지하므로, 여러 조건 플래그를 한 번에 검증할 때 유용하게 활용할 수 있습니다.