2020-05-27 5 kyu Deep comparison

2020-05-28  本文已影响0人  苦庭

https://www.codewars.com/kata/53c235e4d5cd9c397200021d

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);
};

怎么不好?

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

遇到有嵌套(比如这里是对象中嵌套对象)的,首先考虑递归哦!

上一篇下一篇

猜你喜欢

热点阅读