Skip to content

Instantly share code, notes, and snippets.

@blpraveen
Last active August 29, 2015 13:57
Show Gist options
  • Save blpraveen/9759682 to your computer and use it in GitHub Desktop.
Save blpraveen/9759682 to your computer and use it in GitHub Desktop.
Jquery SeiralizeObject to convert a form into a Array of Objects
$.fn.serializeObject = function serializeObject() {
var data = {},pushes = {},named = {};
patterns = {
validate: /^[a-z][a-z0-9_-]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,
key: /[a-z0-9_-]+|(?=\[\])/gi,
push: /^$/,
fixed: /^\d+$/,
named: /^[a-z0-9_-]+$/i
};
var pairs = this.find('input,select,textarea').serializeArray();
if (!$.isArray(pairs)) {
throw new Error("Fields expects an Array");
}
for (var i=0, len=pairs.length; i<len; i++) {
var pair = pairs[i],value;
//console.log( pair.name + " : " + patterns.validate.test(pair.name) );
if (patterns.validate.test(pair.name)) {
var keys = pair.name.match(patterns.key), k;
if(keys.length == 1) {
var obj = {};
obj[pair.name] = pair.value;
console.log(pair.name);
data = $.extend(true, data, obj);
} else {
var push_obj = [];
if (patterns.push.test(keys[(keys.length - 1)])) {
$(keys).each(function(i,val) {
if(i == (keys.length - 1)) return false;
if(jQuery.inArray( val, keys ) == 0 ) {
if(named[val] === undefined) {
return false;
}
push_obj = named[val];
} else {
if(push_obj[val] === undefined) {
push_obj = [];
return false;
} else {
push_obj = push_obj[val];
}
}
});
}
keys.reverse();
$(keys).each(function(i,val) {
var obj = {};
if(jQuery.inArray( val, keys ) == 0 ) {
if (patterns.push.test(val)) {
push_obj.push(pair.value)
obj = push_obj;
} else {
obj[val] = pair.value;
}
} else {
obj[val] = prevObj;
}
if(jQuery.inArray( val, keys ) == (keys.length - 1)) {
named = $.extend(true, named, obj);
}
prevObj = obj
});
}
}
}
if($(named).length) {
data = $.extend(true, data, named);
}
return data;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment