My answer / AC
function deepCompare(o1, o2) {
if(o1===undefined && o2===undefined) return true;
if(o1===[] && o2===[]) return true;
if(o1===null && o2===null) return true;
if((o1===null && o2===undefined) || (o1===undefined && o2===null)) return false;
if(o1===o2) return true;
if(Array.isArray(o1) && Array.isArray(o2)) {
var val1= Object.values(o1).toString();
var val2= Object.values(o2).toString();
} else {
var val1= Object.values(o1).sort().toString();
var val2= Object.values(o2).sort().toString();
}
var keys1= Object.keys(o1).sort().toString();
var keys2= Object.keys(o2).sort().toString();
return (val1==val2 && keys1==keys2);
};
怎么不好?
- 纯粹是面对test编程,没有算法思想可言
Best answer
function deepCompare(o1, o2) {
if (o1 === o2) return true;
if (typeof o1 !== 'object' || typeof o2 !== 'object') return false;
if (Object.keys(o1).length !== Object.keys(o2).length) return false;
var keys = Object.keys(o1);
return keys.every(function(key) {
return deepCompare(o1[key], o2[key]);
});
};
好在哪?
- 用了递归!!本来我也想用递归啊,但是我不会。
- 反复多跟着写几遍吧。。
Recap
遇到有嵌套(比如这里是对象中嵌套对象)的,首先考虑递归哦!
网友评论