1. 순서가 보장되어 있는 경우
1) JSON.stringify(a)
: a에 들어가는 객체, 배열 등 모든 값을 string으로 묶어준다.
const obj1 = {nation: '한국', city: '서울'};
const obj2 = {nation: '한국', city: '서울'};
console.log(JSON.stringify(obj1)); //"{\"nation\":\"한국\",\"city\":\"서울\"}"
console.log(JSON.stringify(obj2)); //"{\"nation\":\"한국\",\"city\":\"서울\"}"
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); //true
2) Object.entries(obj)
: 객체의 key, value값을 각각 담고 있는 이중 배열을 return 한다.
: 리턴 받은 배열을 toString()으로 변환해 string으로 비교한다.
const obj1 = {nation: '한국', city: '서울'};
const obj2 = {nation: '한국', city: '서울'};
console.log(Object.entries(obj1)); //[["nation", "한국"], ["city", "서울"]]
console.log(Object.entries(obj1).toString()); //"nation,한국,city,서울"
console.log(Object.entries(obj1).toString() === Object.entries(obj2).toString()); //true
2. 순서가 보장되어있지 않은 경우
: 서버의 DB값들을 객체화하여 사용할 경우 순서가 보장되지 않을 수 있기 때문에 위의 방식으로는 비교가 불가하다.
: 따라서 정렬 후 새로운 객체에 key, value값을 넣어준 후 위의 방식으로 비교해야 한다.
1) sort() & reduce()
const obj1 = {nation: '한국', city: '서울'};
const obj2 = {city: '서울', nation: '한국'};
console.log(Object.entries(obj1).toString() === Object.entries(obj2).toString()); //false
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); //false
let obj1_sort = Object.keys(obj1).sort().reduce((obj,key) => (obj[key] = obj1[key], obj), {});
let obj2_sort = Object.keys(obj2).sort().reduce((obj,key) => (obj[key] = obj1[key], obj), {});
console.log(Object.entries(obj1_sort).toString() === Object.entries(obj2_sort).toString()); //true
console.log(JSON.stringify(obj1_sort) === JSON.stringify(obj2_sort)); //true
*참고
https://velog.io/@junghyunhao/%EA%B0%9D%EC%B2%B4-%EA%B0%92-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0
'Front-End > JavaScript' 카테고리의 다른 글
[JavaScript] ios에서 new Date() (1) | 2024.01.03 |
---|---|
[JavaScript] Math.random 취약점 대체 (0) | 2023.05.20 |
[JavaScript] call, apply, bind (1) | 2023.03.18 |
[JavaScript] 모듈 내보내기/불러오기 (0) | 2023.03.11 |
[JavaScript] Node.js, NPM (0) | 2023.03.11 |