자바스크립트에서 두 개의 배열이 있을 때, 한 배열을 다른 배열과 비교하여 마스터(master) 배열의 요소가 키(keys) 배열에 존재하는지 확인해야 하는 경우가 있습니다. 그 결과로 마스터 배열과 길이가 같은 새로운 배열을 만들되, 키 배열에 존재하는 값은 true, 존재하지 않는 값은 false로 채워 넣는 것이 목표입니다.
예를 들어, 두 배열이 다음과 같다고 가정해 보겠습니다.
const master = [3,9,11,2,20]; const keys = [1,2,3];
그렇다면 최종적으로 만들어져야 할 배열은 다음과 같습니다.
const finalArray = [true, false, false, true, false];
해결 방법
이 문제는 map() 메서드와 includes() 메서드를 조합하면 아주 간단하게 해결할 수 있습니다. map()으로 마스터 배열의 각 요소를 순회하면서, 해당 요소가 키 배열에 포함되어 있는지 includes()로 확인합니다. includes()는 존재 여부에 따라 불리언 값을 반환하므로, 그대로 새 배열의 요소로 사용하면 됩니다.
예제 코드
const master = [3,9,11,2,20];
const keys = [1,2,3];
const prepareBooleans = (master, keys) => {
const booleans = master.map(el => {
return keys.includes(el);
});
return booleans;
};
console.log(prepareBooleans(master, keys));동작 원리
위 코드에서 prepareBooleans 함수는 마스터 배열의 첫 번째 요소 3부터 시작해 각 요소를 하나씩 검사합니다. 3은 키 배열에 있으므로 true, 9와 11은 없으므로 false, 2는 있으므로 true, 20은 없으므로 false가 됩니다. 이 과정을 거쳐 원하는 길이와 순서를 유지한 불리언 배열이 완성됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ true, false, false, true, false ]