[Javascript] 배열과 객체의 비교

한별·2024년 4월 22일

Javascript

목록 보기
17/25

배열과 객체는 크기가 커서, '별도의 공간'에 저장된다.
그렇다면 배열과 객체를 담고 있는 변수에는 어떤 값이 저장되어 있는가?
객체/배열이 저장되어 있는 '별도의 공간'의 주소가 저장되어 있다.
이로 인해 나타나는 문제가 있다.

const hb1 = {
  name: '한별',
  age: 24,
}

const hb2 = {
  name: '한별',
  age: 24,
}

hb1 === hb2 // false

내용이 같은 객체지만, 같은 객체인지 비교하면 false를 출력한다.
이는 두 값이 저장된 메모리 주소가 다르기 때문이다.
이를 해결하기 위해서는 JSON.stringify 함수를 이용하여 문자열로 변환해주면 된다.

JSON.stringify(hb1) === JSON.stringify(hb2) // true

근데 key의 순서가 일정하지 않을 때는 이 방법을 사용할 수 없다.
이 경우에는 key를 기준으로 정렬한 객체를 만들고, 이를 문자열로 변환하여 비교해야 한다.

const hb3 = {
    age: 24,
    name: '한별'
}

const hb4 = {
    name: '한별',
    age: 24,
}

JSON.stringify(hb3) === JSON.stringify(hb4) // false

let sort_hb3 = Object.keys(one).sort().reduce((obj, key) => (obj[key] = one[key], obj), {});
let sort_hb4 = Object.keys(two).sort().reduce((obj, key) => (obj[key] = two[key], obj), {});
JSON.stringify(sort_hb3) === JSON.stringify(sort_hb4) // true

배열도 마찬가지겠죠 ^^

profile
글 잘 쓰고 싶어요

0개의 댓글