deep equals

by kpulkit29

JavaScript

function deepEquals(val1, val2) {
	if(typeof val1 !== 'object' && typeof val2 !== 'object') {
  	return val1 === val2;
  }
  
  else {
  	if(Array.isArray(val1) && Array.isArray(val2)) {
    	if(val1.length !== val2.length) return false;
    	for(let i=0; i<val1.length; i++) {
      	if(!deepEquals(val1[i], val2[i])) return false;
      }
    	
      return true;
    } else if(Array.isArray(val1) && !Array.isArray(val2) || (!Array.isArray(val1) && Array.isArray(val2))) {
    	// one is object other is array
    	return false
    } else {
    	// this is an object
      let keys1 = Object.keys(val1);
      let keys2 = Object.keys(val2);
      if(!deepEquals(keys1, keys2)) return false;
      for(let key in val1) {
      	if(!val2[key]) return false
        if(!deepEquals(val1[key], val2[key])) return false;
      }
      return true;
    }
  }
}

console.log(deepEquals([1, [1,2,3]],[1,[1,2,3]]));
console.log(deepEquals({a:1, b: {c: [1,2, 3]}}, {a:1, b: {c : [1,2,3]}}))