본문 바로가기

Front-End/JavaScript

[JavaScript] 객체 값 비교

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