Skip to content

Instantly share code, notes, and snippets.

@haiiro-shimeji
Last active December 16, 2015 11:59
Show Gist options
  • Select an option

  • Save haiiro-shimeji/5431691 to your computer and use it in GitHub Desktop.

Select an option

Save haiiro-shimeji/5431691 to your computer and use it in GitHub Desktop.
$.extend({
deepEquals: function(obj1, obj2) {
var q = []
var r = function(o1, o2) {
var k1 = Object.keys(o1).sort()
var k2 = Object.keys(o2).sort()
if (k1.length != k2.length) return false;
var result = true
$.each(k1, function(_, key) {
if("object" == typeof o1[key] && "object" == typeof o2[key]) {
if (-1 < q.indexOf(o1)) {
return true
} else {
q.push(o1)
result = r(o1[key], o2[key])
q.pop()
}
} else {
result = o1[key] == o2[key]
}
return result
})
return result
}
return r(obj1, obj2)
}
})
test("$.deepEquals", function() {
ok($.deepEquals({}, {}))
ok($.deepEquals({id: 1}, {id: 1}))
ok(!$.deepEquals({id: 1}, {id: 2}))
ok($.deepEquals({id: 1, hoge: "hoge"}, {id: 1, hoge: "hoge"}))
ok(!$.deepEquals({id: 1, hoge: "hoge"}, {id: 1, hoge: "fuga"}))
ok($.deepEquals({id: 1, hoge: "hoge", ary: [0 , 1]}, {id: 1, hoge: "hoge", ary: [0 , 1]}))
ok(!$.deepEquals({id: 1, hoge: "hoge", ary: [0 , 2]}, {id: 1, hoge: "hoge", ary: [0 , 1]}))
ok($.deepEquals({obj: {id: 1}}, {obj: {id: 1}}))
ok(!$.deepEquals({obj: {id: 1}}, {obj: {id: 2}}))
var recObject1 = {
id: 1
}
var recObject2 = {
id: 1
}
recObject1.rec = recObject2
recObject2.rec = recObject1
ok($.deepEquals(recObject1, recObject2))
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment