Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

AND(&&) 연산자로 부울 배열 병합하기 - JavaScript

다음과 같이 truefalse 값으로 이루어진 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를 유지하므로, 여러 조건 플래그를 한 번에 검증할 때 유용하게 활용할 수 있습니다.