[Javascript] 두 배열이 같은지 비교하는 방법
March 27, 2024
두개의 배열이 같은 값을 갖고 있는지 비교하는 방법에 대해서 알아보겠습니다.
배열의 동등 비교를 할 때 다음 두가지를 고려하여 비교할 수 있습니다.
- 두 배열이 서로 같은 값을 갖고 있지만, 저장 순서는 다를 때
- 두 배열이 서로 같은 값을 갖고 있고, 저장 순서도 같음
1. for문으로 두 배열의 값과 순서를 모두 비교
for문으로 두 배열을 순회하면서, 동일한 순서(Index)로 저장되고, 같은 값을 갖고 있는지 확인할 수 있습니다.
for문으로 Index와 값을 모두 비교하는게 직관적이고, 정석적인 방법이지만 비교하는 코드가 좀 길 수 있습니다.
function arraysAreEqual(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
let array3 = [1, 2, 4];
console.log(arraysAreEqual(array1, array2)); // true
console.log(arraysAreEqual(array1, array3)); // false
Output:
true
false
toString()과 === 연산자로 비교
문자열이나, 숫자 배열의 경우 toString()
값이 배열 값의 내용을 문자열로 변환하여 리턴합니다.
이런 경우 ===
연산자로 문자열의 내용이 같은지 비교하여, 배열이 같은지 비교할 수 있습니다.
주의할 점은 toString()
이 배열의 내용을 출력하지 않고, 객체의 주소 값을 출력하는 경우, 비교할 수 없습니다.
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
let array3 = [1, 2, 4];
console.log(array1);
console.log(array2);
console.log(array3);
if (array1.toString() === array2.toString()) { // true
console.log("array1 is equal to array2");
}
if (array2.toString() === array3.toString()) { // false
console.log("array2 is equal to array3");
}
Output:
[ 1, 2, 3 ]
[ 1, 2, 3 ]
[ 1, 2, 4 ]
array1 is equal to array2
2. Array.every()로 두 배열의 값과 순서를 모두 비교
Array.every(함수)
는 배열의 모든 요소에 대해서 함수를 수행하며, 모두 true일 때 every()
는 true를 리턴합니다. 즉, 모든 조건이 만족하는지 확인할 때 사용합니다.
아래 arraysAreEqual()
함수 같이, 배열의 길이를 비교하고, every()
로 다른 배열에 동일 위치에 같은 값이 있는지 확인할 수 있습니다.
arr1.every((value, index) => value === arr2[index])
: arr1의 index의 value가 arr2에도 동일 index에 갖고 있는지 확인
function arraysAreEqual(arr1, arr2) {
return arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]);
}
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
let array3 = [1, 2, 4];
console.log(arraysAreEqual(array1, array2)); // true
console.log(arraysAreEqual(array1, array3)); // false
Output:
true
false
3. Array.every()로 두 배열의 값만 비교
위의 예제와 비슷한데, every()
에서 Index와 value를 비교하지 않고, 다른 배열에 value가 포함되어있는지 여부만 includes()
함수로 체크합니다.
따라서, 저장 순서가 달라도 동일한 값을 갖고 있다면, 두 배열은 같다고 판단이 됩니다.
function arraysAreEqual(arr1, arr2) {
return (
arr1.length === arr2.length &&
arr1.every((value, index) => arr2.includes(value))
);
}
let array1 = [1, 2, 3];
let array2 = [1, 2, 3];
let array3 = [1, 2, 4];
let array4 = [3, 2, 1];
console.log(arraysAreEqual(array1, array2)); // true
console.log(arraysAreEqual(array1, array3)); // false
console.log(arraysAreEqual(array1, array4)); // true
Output:
true
false
true