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