Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.02.2022, 00:50
Аспирант
Отправить личное сообщение для raja Посмотреть профиль Найти все сообщения от raja
 
Регистрация: 22.09.2016
Сообщений: 40

как правильно формировать многомерный массив?
Формирую многомерный массив на основании значений полей формы:
formArray = $('#ApplicationSettings').serializeArray();

console.log('formArray');
console.log(formArray);
	
optionsArray = {};
for (var key in formArray) {
	optionsArray[formArray[key]['name']] = formArray[key]['value'];
}

console.log('optionsArray');
console.log(optionsArray);


в форме есть поля с названиями: dealStatusSelect[1], dealStatusSelect[2], dealStatusSelect[4]. Я хочу, чтобы они стали частями одного подмассива.
но в массиве "optionsArray":
Object { projectBeginSelect: "UF_CRM_1584163639", "dealCategorySelect[1]": "7", "dealStatusSelect[1]": "409", "dealStatusSelect[2]": "417", "dealStatusSelect[4]": "423" }

то есть скрипт понимает dealCategorySelect[1] как отдельное имя переменной, а не как имя массива и ключ.
Мне надо, чтобы в массиве было:
Object { projectBeginSelect: "UF_CRM_1584163639", "dealCategorySelect":["1": "409", "2": "417", "4": "423"]}

как это сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 25.02.2022, 08:01
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Не слишком понятно, чего вы хотите.

"dealCategorySelect[1]": "7"

А куда потом эта 7 делась? А 1 куда?
Ответить с цитированием
  #3 (permalink)  
Старый 25.02.2022, 11:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от raja
Мне надо, чтобы в массиве было:
Object { projectBeginSelect: "UF_CRM_1584163639", "dealCategorySelect":["1": "409", "2": "417", "4": "423"]}
Как вариант...
const old = { 
	projectBeginSelect: "UF_CRM_1584163639", 
	"dealCategorySelect[1]": "7", 
	"dealStatusSelect[1]": "409", 
	"dealStatusSelect[2]": "417", 
	"dealStatusSelect[4]": "423" 
}
const o = {}
const a = Object.keys(old)
a.forEach(key => {
	const i = key.indexOf('[')
	if (i === -1) {
		o[key] = old[key]
		return
	}
	const a = key.match(/[^\[\]]+/g)
	if (!o[a[0]]) o[a[0]] = []
	o[a[0]][a[1] - 1] = old[key]
})
alert(JSON.stringify(o))
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2022, 12:30
Аспирант
Отправить личное сообщение для raja Посмотреть профиль Найти все сообщения от raja
 
Регистрация: 22.09.2016
Сообщений: 40

Полный код:
<script type="text/javascript" src="jquery-3.3.1.min.js" ></script>
<form id="ApplicationSettings">
	<input type="text" name="dealStatusSelect[1]" value="1">
	<input type="text" name="dealStatusSelect[2]" value="2">
	<input type="text" name="dealStatusSelect[4]" value="4">
	<input type="text" name="projectBeginSelect" value="UF_CRM_1584163639">
	<input type="submit" >
</form>
<script>
formArray = $('#ApplicationSettings').serializeArray();

console.log('formArray');
console.log(formArray);
	
optionsArray = {};
for (var key in formArray) {
	optionsArray[formArray[key]['name']] = formArray[key]['value'];
}

console.log('optionsArray');
console.log(optionsArray);
</script>


<?
$optionsArray = [];
if(isset($_REQUEST)){
	foreach($_REQUEST as $k => $v){
		$optionsArray[$k] = $v;
	}
}

echo '<pre>';
print_r($optionsArray);
echo '</pre>';
?>


Почему в PHP массив сразу выглядит как
Array
(
    [dealStatusSelect] => Array
        (
            [1] => 1
            [2] => 2
            [4] => 4
        )

    [projectBeginSelect] => UF_CRM_1584163639
)

а в JS надо извращаться.
Ответить с цитированием
  #5 (permalink)  
Старый 25.02.2022, 13:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Чего то вы не договариваете.
Откуда берется
"dealCategorySelect[1]": "7" ?

Откуда вообще dealCategorySelect берется?
Ответить с цитированием
  #6 (permalink)  
Старый 25.02.2022, 14:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от raja
Почему в PHP массив сразу выглядит как
Потому что он так сделан изначально.

Сообщение от raja
а в JS надо извращаться
Потому что это другой язык и он сделан еще лучше. Там просто у инпутов (и пр.контролов) будет одно имя, без всякого пхпэшного изврата с [N]...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно разделить массив? gsdev99 Элементы интерфейса 2 21.02.2019 19:14
Как правильно заполнить массив данными? gsdev99 Элементы интерфейса 2 20.02.2019 17:20
Константный массив, как приватное поле класса AndreyMG Общие вопросы Javascript 0 13.05.2016 17:31
как получить многомерный массив из этой строки imedia Элементы интерфейса 1 12.06.2015 15:30
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14