Created
June 15, 2013 15:40
-
-
Save deepak1556/5788508 to your computer and use it in GitHub Desktop.
some obj manipulation and validation functions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var objcopy = function(old) { | |
if (old === undefined) { | |
return undefined; | |
} | |
if (old === null) { | |
return null; | |
} | |
if (old.parentNode) { | |
return old; | |
} | |
switch (typeof old) { | |
case "string" : { | |
return old.substring(0); | |
break; | |
} | |
case "number" : { | |
return old + 0; | |
break; | |
} | |
case "boolean" : { | |
return old === true; | |
break; | |
} | |
} | |
var newobj = ($.isArray(old)) ? [] : {}; | |
$.each(old, function(k, v){ | |
newobj[k] = objcopy(v) | |
}); | |
return newobj; | |
} | |
var objmerge = function(dst, src) { | |
dst = dst || {}; | |
src = src || {}; | |
var merge = objcopy(dst); | |
for(var k in src) { | |
merge[k] = src[k]; | |
} | |
return merge; | |
} | |
var objkeys = function(obj) { | |
var keys = []; | |
$.each(obj, function(k,v) { | |
if (obj.hasOwnProperty(k)) { | |
keys.push(k); | |
} | |
}); | |
return keys; | |
} | |
var objcmp = function(a, b, strict_ordering) { | |
if (!a || !b) { | |
return a === b; | |
} | |
if (typeof a != typeof b) { | |
return false; | |
} | |
if (typeof a != 'object') { | |
return a === b; | |
} else { | |
if ($.isArray(a)) { | |
if (!($.isArray(b))) { | |
return false; | |
} | |
if (a.length != b.length) { | |
return false; | |
} | |
} else { | |
var a_keys = []; | |
for(var k in a) { | |
if (a.hasOwnProperty(k)) { | |
a_keys.push(k); | |
} | |
} | |
var b_keys = []; | |
for(var k in b) { | |
if (b.hasOwnProperty(k)) { | |
b_keys.push(k); | |
} | |
} | |
if (!strict_ordering) { | |
a_keys.sort(); | |
b_keys.sort(); | |
} | |
if (a_keys.join(',') !== b_keys.join(',')) { | |
return false; | |
} | |
} | |
var same = true; | |
$.each(a, function(k) { | |
var diff = objcmp(a[k], b[k]); | |
same = same && diff; | |
if (!same) { | |
return false; | |
} | |
}); | |
return same; | |
} | |
} | |
var uniq = function(arr) { | |
var len = arr.length; | |
var set = {}; | |
for(var i=0; i<len; i++) { | |
set[arr[i]] = true; | |
} | |
return objkeys(set); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment