...
자바스크립트 배열 동등 비교
숫자나 문자열 비교할때는 == 이나 === 연산자를 이용하면 되지만, 배열이나 객체를 비교할때는 불가능하다.
왜냐하면 reference 타입으로써 값이 비교 되는 것이 아닌 주소값이 비교되기 때문이다.
const a = [1, 2, 3];
const b = [1, 2, 3];
// 배열 구성을 비교하는게 아닌 배열 메모리 주소값 비교가 된다
a == b; // false
a === b; // false
따라서 배열 구성 요소를 동등 비교하기 위해서는 직접 하드 코딩하여 비교하는 수밖에 없다.
여러가지 방법이 있는데 몇가지 사례를 소개해 본다.
JSON.stringify
- JSON.stringify() 메소드로 배열을 직렬화(문자열) 하여 문자열 비교
const equals = (a, b) => JSON.stringify(a) === JSON.stringify(b);
const a = [1, 2, 3];
const b = [1, 2, 3];
equals(a, b); // true
직접 만들어 쓰기
Array.prototype.every()메소드를 사용해 비교
const equals = (a, b) => {
if(a.length === b.length) {
return a.every((v, i) => v === b[i]);
}
}
// 한줄로 표현
const equals = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
const a = [1, 2, 3];
const b = [1, 2, 3];
equals(a, b); // true
순서가 맞지 않은 배열 비교
- 배열 요소 순서가 다르지만 이는 중요하지 않고, 오직 배열 구성 요소가 동일한지 확인하는 케이스
- 간단하게 배열을 먼저 정렬시키고, 비교하면 된다.
const arr1 = [1, 2, 3];
const arr2 = [2, 1, 3];
const equals = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
equals(arr1, arr2); // false
arr1.sort();
arr2.sort();
equals(arr1, arr2); // true
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.