Skip to content

Instantly share code, notes, and snippets.

@deepak1556
Created June 15, 2013 15:40
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 deepak1556/5788508 to your computer and use it in GitHub Desktop.
Save deepak1556/5788508 to your computer and use it in GitHub Desktop.
some obj manipulation and validation functions
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