Javascript.RU

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

Создание многомерного массива
Возникла проблема при заполнении многомерного массива, теряются значения во вложенных массивах. Портянку кода сократил на сколько возможно.... Пробую описать суть проблемы. Есть "Данные для заполнения массива". После загрузки страницы пробую сформировать двумерный массив, ожидаю получить "Ожидаемый результат". По факту получается "Полученный результат" - пропадают на втором уровне все значения, кроме последних.
Самого реального, проблемного кода - строк 10, смотреть проще тут: http://jsbin.com/radikacofi/edit?html,output
ХЗ на javascript.ru код не запускается полностью, по ссылке - все работает ( вернее запускается, но результат печальный(((()
HELP

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>ПРИМЕР-Вопрос</title>
	<script src="http://code.jquery.com/jquery-3.1.1.min.js"  integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="  crossorigin="anonymous"></script>
</head>

	<body class="">

<div id="sortingBTN">
<h2>Данные для заполнения массива</h2>
	<h3>Срок поставки</h3>
		<input type='checkbox' data-parametr='available' data-value='1' class='parametrSortingJS' > 1<i> всего 210 объектов</i><br>
		<input type='checkbox' data-parametr='available' data-value='2' class='parametrSortingJS' > 2<i> всего 126 объектов</i><br>
		<input type='checkbox' data-parametr='available' data-value='3' class='parametrSortingJS' > 3<i> всего 429 объектов</i><br>
		<input type='checkbox' data-parametr='available' data-value='empty((' class='parametrSortingJS' > empty((<i> всего 3 объектов</i><br>

	<h3>Цветовая гамма</h3>
		<input type='checkbox' data-parametr='color' data-value='empty((' class='parametrSortingJS' > empty((<i> всего 325 объектов</i><br>
		<input type='checkbox' data-parametr='color' data-value='3' class='parametrSortingJS' > 3<i> всего 179 объектов</i><br>
		<input type='checkbox' data-parametr='color' data-value='5' class='parametrSortingJS' > 5<i> всего 32 объектов</i><br>
		<input type='checkbox' data-parametr='color' data-value='4' class='parametrSortingJS' > 4<i> всего 173 объектов</i><br>
		<input type='checkbox' data-parametr='color' data-value='2' class='parametrSortingJS' > 2<i> всего 55 объектов</i><br>
		<input type='checkbox' data-parametr='color' data-value='1' class='parametrSortingJS' > 1<i> всего 4 объектов</i><br>

</div>

<script>
	// проблема START
	$(function() 
	{
		var arrData = [];
		$('#sortingBTN input.parametrSortingJS').each(function(indxInput, elementInput)
		{	//	Собираем пары параметр/значение
			parametr = $(elementInput).data('parametr');
			value = $(elementInput).data('value');	
			if( arrData.indexOf( parametr ) == -1 )
			{	//	нет ключа в массиве, создаем
				arrData[parametr] = [];
			}
			if( arrData[parametr].indexOf( value ) == -1 )
			{	//	нет ключа в массиве, создаем, заполнякм
				arrData[parametr][value] = 0;
			}			
		});
		$('#control').html(print_r( arrData, 0, 1 ));
	});
	// Проблема END
	
	function print_r(arr, level, html) 
		{	//	Контрольный вывод массива
			if(!html) lt = "\n"; else lt = "<br>";
			var print_red_text = "";
			if(!level) level = 0;
			var level_padding = "";
			for(var j=0; j<level+1; j++) level_padding += " &nbsp; &nbsp; ";
			if(typeof(arr) == 'object') {
				for(var item in arr) {
					var value = arr[item];
					if(typeof(value) == 'object') {
						print_red_text += level_padding + "'" + item + "' :" + lt;
						print_red_text += print_r(value,level+1, html);
			}
					else
						print_red_text += level_padding + "'" + item + "' => \"" + value + "\"" + lt;
				}
			}

			else  print_red_text = "===>"+arr+"<===("+typeof(arr)+")";
			return print_red_text;
		}
</script>
<div style="color:green">
	<h2>Полученный результат</h2>
	<div id="control"></div>
</div>
<h2>Ожидаемый результат:</h2>
['available']<br>
 &nbsp; &nbsp; ['1'] = 0<br>
 &nbsp; &nbsp; ['2'] = 0<br>
 &nbsp; &nbsp; ['3'] = 0<br>
 &nbsp; &nbsp; ['empty(('] = 0<br>
['color']<br>
 &nbsp; &nbsp; ['empty(('] = 0<br>
 &nbsp; &nbsp; ['3'] = 0<br>
 &nbsp; &nbsp; ['5'] = 0<br>
 &nbsp; &nbsp; ['4'] = 0<br> 
 &nbsp; &nbsp; ['2'] = 0<br>
 &nbsp; &nbsp; ['1'] = 0<br> 
 
	</body>
</html>

Последний раз редактировалось al456, 04.10.2017 в 00:21.
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2017, 00:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

al456,
для начала может
var arrData = {}; и что такое ноль ['1'] = 0?
Ответить с цитированием
  #3 (permalink)  
Старый 04.10.2017, 00:37
Аспирант
Отправить личное сообщение для al456 Посмотреть профиль Найти все сообщения от al456
 
Регистрация: 20.12.2012
Сообщений: 65

var arrData = {}; - типо перейти на обьекты??? - локально пробую
['1'] = 0 Это присвоенное значение Line44: arrData[parametr][value] = 0;
Ответить с цитированием
  #4 (permalink)  
Старый 04.10.2017, 00:47
Аспирант
Отправить личное сообщение для al456 Посмотреть профиль Найти все сообщения от al456
 
Регистрация: 20.12.2012
Сообщений: 65

Вопрос закрыт, как всегда - СПАСИБО РОНИ!!!!

По сути - перешел на обьекты - все заработало, долблюсь дальше
Ответить с цитированием
  #5 (permalink)  
Старый 04.10.2017, 00:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

al456,
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>ПРИМЕР-Вопрос</title>
  <script src="https://code.jquery.com/jquery-3.1.1.min.js"  ></script>
</head>

  <body class="">

<div id="sortingBTN">
<h2>Данные для заполнения массива</h2>
  <h3>Срок поставки</h3>
    <input type='checkbox' data-parametr='available' data-value='1' class='parametrSortingJS' > 1<i> всего 210 объектов</i><br>
    <input type='checkbox' data-parametr='available' data-value='2' class='parametrSortingJS' > 2<i> всего 126 объектов</i><br>
    <input type='checkbox' data-parametr='available' data-value='3' class='parametrSortingJS' > 3<i> всего 429 объектов</i><br>
    <input type='checkbox' data-parametr='available' data-value='empty((' class='parametrSortingJS' > empty((<i> всего 3 объектов</i><br>

  <h3>Цветовая гамма</h3>
    <input type='checkbox' data-parametr='color' data-value='empty((' class='parametrSortingJS' > empty((<i> всего 325 объектов</i><br>
    <input type='checkbox' data-parametr='color' data-value='3' class='parametrSortingJS' > 3<i> всего 179 объектов</i><br>
    <input type='checkbox' data-parametr='color' data-value='5' class='parametrSortingJS' > 5<i> всего 32 объектов</i><br>
    <input type='checkbox' data-parametr='color' data-value='4' class='parametrSortingJS' > 4<i> всего 173 объектов</i><br>
    <input type='checkbox' data-parametr='color' data-value='2' class='parametrSortingJS' > 2<i> всего 55 объектов</i><br>
    <input type='checkbox' data-parametr='color' data-value='1' class='parametrSortingJS' > 1<i> всего 4 объектов</i><br>

</div>

<script>
  // проблема START
  $(function()
  {
    function fn()
    {
       var obj = {};
     $("[data-parametr]").each(function(indx, el){
           var data = $(el).data(),
           parametr = data.parametr;
           parametr = obj[parametr]||(obj[parametr]={});
           parametr[data.value] = +el.checked
     });
    $('#control').html( JSON.stringify(obj,"",4));
    };
    fn()
    $("[data-parametr]").on({click : fn})
  });

</script>
<div style="color:green">
  <h2>Полученный результат</h2>
  <div id="control"></div>
</div>
<h2>Ожидаемый результат:</h2>
['available']<br>
 &nbsp; &nbsp; ['1'] = 0<br>
 &nbsp; &nbsp; ['2'] = 0<br>
 &nbsp; &nbsp; ['3'] = 0<br>
 &nbsp; &nbsp; ['empty(('] = 0<br>
['color']<br>
 &nbsp; &nbsp; ['empty(('] = 0<br>
 &nbsp; &nbsp; ['3'] = 0<br>
 &nbsp; &nbsp; ['5'] = 0<br>
 &nbsp; &nbsp; ['4'] = 0<br>
 &nbsp; &nbsp; ['2'] = 0<br>
 &nbsp; &nbsp; ['1'] = 0<br>

  </body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 04.10.2017, 01:01
Аспирант
Отправить личное сообщение для al456 Посмотреть профиль Найти все сообщения от al456
 
Регистрация: 20.12.2012
Сообщений: 65

Спасибо за ответ, доблюсь, вникаю, разбираюсь
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обход многомерного массива с задержкой после каждого цикла Walk Общие вопросы Javascript 2 14.08.2017 16:17
Преобразование многомерного массива в строку и обратно Bond Общие вопросы Javascript 5 08.04.2015 13:16
Подскажите как сравнить первые элементы многомерного массива? yloboda Элементы интерфейса 3 08.06.2014 15:00
Создание списка из полей и ключей многомерного массива IntegralAL Events/DOM/Window 13 06.12.2013 17:01
Создание многомерного массива из PHP ivandelov Общие вопросы Javascript 6 13.06.2012 21:01