@DmitrySmirnov2007

Как создать массив из нескольких input jquery?

Как мне получить массив вида {"123":{"name":"Название","id":"1"},"221":{"name":"Название 2","id":"3"}}

Вод код:

<div class="js-input">
<input type="hidden" name="params[123][name]" value="Название">
<input type="hidden" name="params[123][id]" value="1">

<input type="hidden" name="params[221][name]" value="Название 2">
<input type="hidden" name="iparams[221][id]" value="3">
</div>

<script>
	  
			 		
		var data = {};
		$('.js-input').find("input[name^='params[']").each(function() {
                var  match = this.name.match(/^params\[(\d+)]\[(.+)]$/);

				data[match[1]] = {};
			    data[match[1]][match[2]] = this.value;
			

            });	  
		     
	console.log(data);

	
</script>
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
@StockholmSyndrome
const data = {}; 
const $inputs = $('.js-input input[name^=params]:nth-child(odd)');	

$inputs.each(function() {
  const $first = $(this); 
  const $second = $first.next(); 
  const regexp = /\[(\d+)\]\[(.+?)\]/; 
  
  const [, value, name] = $first.attr('name').match(regexp); 
  const [,, id] = $second.attr('name').match(regexp);
  data[value] = {
    [name]: $first.val(),
    [id]: $second.val()
  };
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
0xD34F
@0xD34F Куратор тега JavaScript
const data = $('.js-input input').get().reduce((obj, input) => {
  const
    path = input.name.match(/(?<=\[)(\w+)(?=\])/g),
    key = path.pop();

  path.reduce((acc, n) => acc[n] = acc[n] || {}, obj)[key] = input.value;

  return obj;
}, {});
Ответ написан
@shevchenko__k
let arr = JSON.parse($('form').find('input:hidden').serialize());

Попробуй так
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы