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

JavaScript에서 2차원 불리언 배열을 AND 연산으로 병합하는 방법

JavaScript 개발을 하다 보면 여러 개의 불리언(Boolean) 배열을 하나의 배열로 합쳐야 하는 경우가 종종 있습니다. 예를 들어 다음과 같은 2차원 불리언 배열이 있다고 가정해 보겠습니다.

const arr = [[true,false,false],[false,false,false],[false,false,true]];

여기서 우리가 작성해야 할 함수는 각 하위 배열의 대응되는 위치에 있는 요소들을 AND(&&) 연산자로 결합하여, 하나의 1차원 배열로 병합하는 것입니다.

접근 방식

이 문제는 Array.prototype.reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. reduce()를 사용하면 배열의 각 요소(하위 배열)를 순회하면서 누적값(acc)에 대응 인덱스별 AND 연산 결과를 저장할 수 있습니다.

구현 코드

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));

코드 설명

  • reduce()의 초기값으로 빈 배열([])을 지정합니다.
  • 각 하위 배열(val)을 forEach로 순회하면서, 현재 인덱스(ind)에 해당하는 누적값과 현재 불리언 값을 AND 연산합니다.
  • acc[ind] && bool || false 표현식은 undefined와의 연산 시 발생할 수 있는 오류를 방지하고, 결과가 falsy일 경우 항상 false를 반환하도록 보장합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.

[ false, false, false ]

결과를 살펴보면 첫 번째 인덱스는 true && false && false = false, 두 번째 인덱스는 모두 false이므로 false, 세 번째 인덱스 역시 false || false || true에서 앞의 false 때문에 최종적으로 false가 됩니다. 따라서 모든 요소가 false인 배열이 출력되는 것이 정상적인 동작입니다.