-
[알고리즘/자바스크립트] 완전 일치 (Deep Equals)Algorithm 2019. 8. 15. 11:28
Deep Equals
Write a function that, given two objects, returns whether or not the two are deeply equivalent--meaning the structure of the two objects is the same, and so is the structure of each of their corresponding descendants.
Examples:
deepEquals({a:1, b: {c:3}},{a:1, b: {c:3}}); // true
deepEquals({a:1, b: {c:5}},{a:1, b: {c:6}}); // false
don't worry about handling cyclical object structures.
* JSON, Object.assign 등 사용금지
인자로 주어지는 두 객체의 value값이 모두 같은지 확인하는 문제이다.
만약에 두 객체의 value가 또 다른 object라면 그 object의 value값이 같은지도 확인해야한다.
이 때 같다는 것은 value값이 ===으로 완벽히 같다는 것을 말한다.
var deepEquals = function(apple, orange){ for (let key in apple) { if (typeof apple[key] === 'object') { if (typeof orange[key] === 'object') { return deepEquals(apple[key], orange[key]); } else { return false; } } if (apple[key] !== orange[key]) { return false; } } return true; };
이번 문제는 좀 더 수월하게 풀었다.
1번 객체를 for...in문으로 순회하여,
각각의 키에 해당하는 값이 객체가 아니라면
2번 객체에도 해당 키에 매칭되는 값이 있는지,
그리고 그 값과 완전히 일치하는지 조사하여,
일치하지 않으면 false를 리턴한다.
만약에 1번 객체에 키에 매칭하는 값이 object라면,
2번 객체에 똑같은 키에 매칭하는 값이 object인지 확인하고
object가 아니면 false를 리턴한다.
object이면 그 각각의 object를 다시 deepEquals() 함수의 인자로 넣어서 재귀로 검사한다.
만약에 모든 조건에 걸리지 않으면 일치한다는 것이므로 true를 리턴한다.
반응형'Algorithm' 카테고리의 다른 글
[알고리즘/자바스크립트] mix-in 패턴을 이용한 이벤트 함수 만들기 (609) 2019.08.22 [알고리즘/자바스크립트] 트리에서 조건에 맞는 값만 필터하기 (Tree Collect) - Breadth-First Search (609) 2019.08.20 [알고리즘/자바스크립트] 트리에서 조건에 맞는 값만 필터하기 (Tree Collect) - Depth-First Search (609) 2019.08.15 [알고리즘/자바스크립트] 환영 연결 리스트 찾기 (Linked List Cycle) (609) 2019.08.08 [알고리즘/자바스크립트] 문자열 카운터 (String incrementer) (609) 2019.08.04 COMMENT