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 );
  
});