При всем заданном ответе есть какая-то проблема, которая ...
blockquote>Если имя входа в качестве массива похожее на
name[key]
, но оно будет генерироваться следующим образомname:{ key : value }
Например: Если у меня есть такая форма.
<form> <input name="name" value="value" > <input name="name1[key1]" value="value1" > <input name="name2[key2]" value="value2" > <input name="name3[key3]" value="value3" > </form>
Затем он будет генерировать объект таким образом со всем данным ответом.
Object { name : 'value', name1[key1] : 'value1', name2[key2] : 'value2', name3[key3] : 'value3', }
Но он должен генерировать, как показано ниже, каждый хочет получить как это, как показано ниже.
Object { name : 'value', name1 : { key1 : 'value1' }, name2 : { key2 : 'value2' }, name3 : { key2 : 'value2' } }
Затем попробуйте выполнить это ниже кода js.
blockquote>
(function($){ $.fn.getForm2obj = function(){ var _ = {},_t=this; this.c = function(k,v){ eval("c = typeof "+k+";"); if(c == 'undefined') _t.b(k,v);} this.b = function(k,v,a = 0){ if(a) eval(k+".push("+v+");"); else eval(k+"="+v+";"); }; $.map(this.serializeArray(),function(n){ if(n.name.indexOf('[') > -1 ){ var keys = n.name.match(/[a-zA-Z0-9_]+|(?=\[\])/g),le = Object.keys(keys).length,tmp = '_'; $.map(keys,function(key,i){ if(key == ''){ eval("ale = Object.keys("+tmp+").length;"); if(!ale) _t.b(tmp,'[]'); if(le == (i+1)) _t.b(tmp,"'"+n['value']+"'",1); else _t.b(tmp += "["+ale+"]",'{}'); }else{ _t.c(tmp += "['"+key+"']",'{}'); if(le == (i+1)) _t.b(tmp,"'"+n['value']+"'"); } }); }else _t.b("_['"+n['name']+"']","'"+n['value']+"'"); }); return _; } })(jQuery); console.log($('form').getForm2obj());
<!DOCTYPE html><html><head> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <title>Convert form data to JavaScript object with jQuery</title> </head> <body> <form> <input name="name" value="value" > <input name="name1[key1]" value="value1" > <input name="name2[key2]" value="value2" > <input name="name3[key3]" value="value3" > <input type="checkbox" name="name4[]" value="1" checked="checked"> <input type="checkbox" name="name4[]" value="2"> <input type="checkbox" name="name4[]" value="3"> </form> </body></html>