다음과 같은 두 개의 배열이 있다고 가정해 보겠습니다.
var firstArray=[100,200,400];
var secondArray=[400,100,200];
두 배열에 담긴 값이 순서와 관계없이 동일한지 확인하려면 sort() 메서드로 배열을 각각 정렬한 뒤, for 루프를 이용해 요소를 하나씩 비교하면 됩니다. 아래 코드를 살펴보세요.
예제
var firstArray=[100,200,400];
var secondArray=[400,100,200];
function areBothArraysEqual(firstArray, secondArray) {
if (!Array.isArray(firstArray) || ! Array.isArray(secondArray) ||
firstArray.length !== secondArray.length)
return false;
var tempFirstArray = firstArray.concat().sort();
var tempSecondArray = secondArray.concat().sort();
for (var i = 0; i < tempFirstArray.length; i++) {
if (tempFirstArray[i] !== tempSecondArray[i])
return false;
}
return true;
}
if(areBothArraysEqual(firstArray,secondArray))
console.log("Both are equals");
else
console.log("Both are not equals");
위 프로그램을 실행하려면 터미널에서 다음 명령어를 입력합니다.
node fileName.js.
여기서는 파일 이름을 demo156.js로 지정했습니다.
출력 결과
PS C:\Users\Amit\JavaScript-code> node demo156.js
Both are equals
코드 설명
위 함수의 동작 방식을 단계별로 살펴보면 다음과 같습니다.
1. 유효성 검사: Array.isArray()로 전달된 인수가 실제 배열인지 먼저 확인하고, 두 배열의 길이가 다르면 즉시 false를 반환합니다. 길이가 다른 배열은 절대 같을 수 없기 때문입니다.
2. 원본 배열 보호: concat()으로 배열의 복사본을 만든 뒤 정렬합니다. sort()는 원본 배열 자체를 변경하기 때문에, 원본 데이터를 그대로 유지하려면 복사본을 사용하는 것이 안전합니다.
3. 요소 비교: 정렬된 두 배열을 for 루프로 순회하면서 !==(엄격한 불일치 연산자)로 각 위치의 값을 비교합니다. 하나라도 다른 값이 나오면 바로 false를 반환하고, 끝까지 모든 값이 일치하면 true를 반환합니다.
이 방식은 숫자나 문자열처럼 기본형(primitive) 값을 담은 배열을 비교할 때 유용합니다. 참고로 객체 배열을 비교하려면 각 속성을 직접 비교하거나 JSON.stringify()를 활용하는 등 별도의 처리가 필요합니다.