Javascript에서 객체를
===
비교하면 안댄다!
const arr1 = [1,2,3], arr2 = [1,2,3];
console.log(arr1 === arr2)
결과는 false
(⊙_⊙;)
JS에서 Array도 객체이기 때문.
배열을 string으로 변환한다.
// 방법 1
console.log(JSON.stringify(arr1) === JSON.stringify(arr2))
// 방법 2
console.log(arr1.join('') === arr2.join(''))
동작 과정 array → string → 문자열 비교
따라서 사실 전통적으로 하나하나 비교하는 것이 더 빠르다.
허나 빠르게 알고리즘을 적용하려면 코드도 짧고 이렇게하는게 깔끔하다.
프로젝트를 할 때는 이렇게 따로 util를 만들어 두는 것이 좋을 것 같다.
// 커스텀 프로토타입을 설정하기.
Array.prototype.equals = function (getArray) {
if (this.length != getArray.length) return false;
for (var i = 0; i < getArray.length; i++) {
if (this[i] instanceof Array && getArray[i] instanceof Array) {
if (!this[i].equals(getArray[i])) {
return false;
}
} else if (this[i] != getArray[i]) {
return false;
}
}
return true;
};
console.log([1,2,3].equals([1,2,3])) // true
// 일반적인 배열 순회
function arraysEqual(a, b) {
if (a === b) return true;
if (a == null || b == null) return false;
if (a.length !== b.length) return false;
for (var i = 0; i < a.length; ++i)
if (a[i] !== b[i]) return false;
return true;
}
console.log(arraysEqual([1,2,3], [1,2,3])) // true
배열을 미리 정렬시키면 된다.
const arr1 = [1,2,3], arr2 = [2,1,3];
arr1.sort();
arr2.sort();
// 위에 있는 비교 알고리즘 사용
Map과 Set을 활용할 수도 있지만
~ 다양한 응용 방법에 관해서는 추후에 계속 업데이트 하자.