JSFiddle - React, Tailwind, and code Playground
by Сергей Тарасевич
HTML
<form action="" data-form="user">
<div><input type="text" name="text[]"></div>
<div><input type="text" name="text[]"></div>
<div><input type="text" name="text[]"></div>
<div><input type="text" name="text1"></div>
<div><input type="text" name="text2"></div>
<div><input type="text" name="text3"></div>
<div><input type="text" name="text4"></div>
<div>
<select name="select1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</div>
<div>
<select name="select2[]" multiple>
<option value="1">11111111</option>
<option value="2">22222222</option>
<option value="3">33333333</option>
<option value="4">44444444</option>
<option value="5">55555555</option>
</select>
</div>
<div><textarea name="textarea1"></textarea></div>
<div><textarea name="textarea2"></textarea></div>
</form>
<div data-btn="user">Получить</div>
JavaScript
var hash_array = function( a ) {
var b = {},
name = '',
x = false,
y = '';
$( a ).each( function( ) {
if ( this.value !== '' ) {
y = this.name.replace( /[\[\]]/g, '' );
if ( y != this.name ) {
name = this.name.replace( /[\]]/g, '' );
name = name.split( '[' );
if ( name[name.length-1] != '' ) {
x = true;
} else {
name = this.name.replace( /[\[\]]/g, '' );
}
} else {
name = y;
}
if ( x == false ) {
if ( name in b ) {
if ( $.isArray( b[name] ) ) {
b[name].push( this.value );
} else {
b[name] = [ b[name], this.value ];
}
} else {
b[name] = this.value;
}
} else {
if ( name.length == 2 ) {
if ( ! ( name[0] in b ) ) {
b[name[0]] = {};
}
b[name[0]][name[1]] = this.value;
} else if ( name.length == 3 ) {
if ( name[0] in b ) {
if ( ! ( name[1] in b[name[0]] ) ) {
b[name[0]][name[1]] = {};
}
b[name[0]][name[1]][name[2]] = this.value;
} else {
b[name[0]] = {};
b[name[0]][name[1]] = {};
b[name[0]][name[1]][name[2]] = this.value;
}
}
}
}
});
return b;
}
$( document ).on( 'click', '[data-btn]', function () {
var b = '[data-form="' + $( this ).data( 'btn' ) + '"]';
var a = hash_array( $( b + ' input, ' + b + ' select, ' + b + ' textarea' ).serializeArray() );
console.log( a );
});