Skip to content

Instantly share code, notes, and snippets.

@karenpeng
Created February 19, 2016 00:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karenpeng/dea254a283376f005e54 to your computer and use it in GitHub Desktop.
Save karenpeng/dea254a283376f005e54 to your computer and use it in GitHub Desktop.
var assert = require('assert')
function deepEqual(obj1, obj2){
var keys1 = Object.keys(obj1)
var keys2 = Object.keys(obj2)
if(keys1.length !== keys2.length) return false
for(var key in obj1){
if(!obj2.hasOwnProperty(key)) return false
else if(typeof obj1[key] !== 'object' && typeof obj2[key] !== 'object'){
if(obj1[key] !== obj2[key]) return false
}
else if(typeof obj1[key] === 'object' && typeof obj2[key] === 'object'){
if(getType(obj1[key]) !== getType(obj2[key])) return false
switch(getType(obj1[key])){
// case '[object Array]':
// if(obj1[key].length !== obj2[key].length) return false
// for(var i = 0; i < obj1[key].length; i++){
// if(obj1[key][i] !== obj2[key][i]) return false
// }
// break
case '[object Object]':
if(!deepEqual(obj1[key], obj2[key])) return false
break
// case '[object Function]':
// //???
// break
//...many more
}
}
else return false
}
return true
}
function getType(obj){
return Object.prototype.toString.call(obj)
}
var a = {1: {2: 3}, 4: 5}
var b = {1: {2: 3}, 4: 5}
var c = {1: {2: {3: 4}}}
var d = {1: {2: {3: 4}}}
assert.equal(deepEqual(a, b), true)
assert.equal(deepEqual(a, c), false)
assert.equal(deepEqual(c, d), true)
console.log(a === b)
console.log(a == b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment