Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Нужно добавить новые ключи и значения в многомерный массив (https://javascript.ru/forum/jquery/64437-nuzhno-dobavit-novye-klyuchi-i-znacheniya-v-mnogomernyjj-massiv.html)

wet 11.08.2016 05:59

Нужно добавить новые ключи и значения в многомерный массив
 
есть такой контент
<div class='question' type='text' data-question='вопрос'>вопрос
    <div class='answer' type='text' data-answer='ответ 1'>ответ 1</div>
    <div class='answer' type='text' data-answer='ответ 2'>ответ 2</div>
</div>
 
<div class='question' type='text' data-question='вопрос 2'>вопрос 2
    <div class='answer' type='text' data-answer='ответ 3'>ответ 3</div>
    <div class='answer' type='text' data-answer='ответ 4'>ответ 4</div>
</div>
 
<h1 id='upload' style='text-align:center; display:block;'>ok</h1>
Нужно пройтись по всем блокам, собрать данные и добавить их в массив. Я сделал так
var testList = {};
var i = 0;
    $('#upload').on('click', function() {
        $('.question').each(function(){
            i = i+1;
            var cur_el = $(this);
            var question = cur_el.attr('data-question');
            
            testList[i] = {
                    'testName' : 'Тест',
                    'questionsList' : {
                        'question' : question,
                        'answerList' : {}
                    }   
                };
            
            var y = 0;
            cur_el.find('.answer').each(function(){
                y = y+1;
                var answer = $(this).attr('data-answer');
console.log(y);             
                testList.i.answerList.y.push( {'answer' : answer} );
            }); 
        });
 
        console.log(testList);      
    });
Но вылетает ошибка TypeError: testList.i is undefined. Подскажите как решить эту задачу. На выходе должны получить такой массив
testList[1] = {
        'testName' : 'Тест',
        'questionsList' : {
            0 : {
                'question' : 'Вопрос 1',
                'answerList' : {
                    0 : {
                        'answer' : 'Ответ 1'
                    },
                    1 : {
                        'answer' : 'Ответ 2'
                    }
                }
            },
            1 : {
                'question' : 'Вопрос 2',
                'answerList' : {
                    0 : {
                        'answer' : 'Ответ 3'
                    },
                    1 : {
                        'answer' : 'Ответ 4'
                    }
                }
            }
        }
    };

wet 11.08.2016 08:04

Решено
$('#upload').on('click', function() {
		$('.question').each(function(i){
			var cur_el = $(this);
			var question = cur_el.attr('data-question');
			
			testList[i] = {
					testName : 'Тест',
					questionsList : {
						question : question,
						answerList : {}
					}	
				};
			
			cur_el.find('.answer').each(function(y){
				var answer = $(this).attr('data-answer');
				
				testList[i]['questionsList']['answerList'][y] = {answer : answer};
			});	
		});

		console.log(testList);		
	});

рони 11.08.2016 08:49

wet,
{
  "testName": "Тест",
  "questionsList": {
    "0": {
      "question": "вопрос",
      "answerList": {
        "0": "ответ 1",
        "1": "ответ 2"
      }
    },
    "1": {
      "question": "вопрос 2",
      "answerList": {
        "0": "ответ 3",
        "1": "ответ 4"
      }
    }
  }
}


var testList = {
    testName: "Тест",
    questionsList: {}
};
$(".question").each(function(b, c) {
    var a = {},
        d = $(this).data("question");
    a.question = d;
    a.answerList = {};
    $(".answer", c).each(function(b, c) {
        a.answerList[b] = $(c).data("answer")
    });
    testList.questionsList[b] = a
});


Часовой пояс GMT +3, время: 00:14.