const a = [1, 2, 3]
const b = [1, 2, 3]
console.log(a === b) // false
Javscript에서 두 배열을 비교할 때 ===으로 비교하게 되면 당연히 false값이 나오게 된다.
왜냐하면, 배열도 객체이기 때문이다.
우선, 이것이 이해 안 가는 분들은 Javascript data type부터 memory에 어떻게 저장되는지 공부해보자.
배열을 string으로 변환한다.
( JSON.stringify()사용 )
const a = [1, 2, 3]
const b = [1, 2, 3]
console.log(JSON.stringify(a) === JSON.stringify(b)) // true
array를 string으로 바꾸고 비교하기 때문에 결과값은 true가 된다.
하지만, 이렇게 했을 때는 array 안에 있는 값들이 같아도 순서가 바뀌면 false값이 나오게 된다.
두 배열이 서로 교집합이 존재하는지 여부에 따라서 문제를 푸는 과정이라면 solution 2 과정을 적용해보길 바란다.
filter와 includes을 사용하여 두 배열에 포함된 동일한 요소를 확인 할 수 있다.
const a = [1, 4, 3, 2];
const b = [5, 2, 6, 7, 1];
a.filter(it => b.includes(it)); // returns [1, 2]
filter 메소드 사용으로 a배열을 순회하면서 b배열에 a의 각 배열의 요소들이 포함되어 있는지에 따라서 true, false값을 통해 걸러지게 된다.
따라서 두 배열의 교집합이 나오게 된다.
교집합이 존재하는지 여부에 따라서 로직을 따로 또 짤 수 있다.
<출처>
https://hohoya33.tistory.com/134
https://velog.io/@bepyan/JS-%EB%B0%B0%EC%97%B4%EB%A5%BC-%EB%B9%84%EA%B5%90%ED%95%98%EB%8A%94-%EB%B2%95