Двумерный массив. Проверка есть ли подмасив массива в другом массиве
Здравствуйте, есть код
//id вопроса, вопрос, варианты ответа, комментарий, номер правильного ответа var data_array = [ [1,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком1",3], [2,"Вопрос","Неверный ответ","Верный","Неверный ответ","ком2",2], [3,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком3",1], [4,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком4",3], [5,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком5",3], [6,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком6",1], ]; var prov = []; //пустой массив, в который будут записывать используемые подмассивы массива var p=0; //подсчёт количества правильных ответов var i=0; while (i<3) //повторение цикла три раза 0-2 { var rand = data_array[Math.floor(Math.random()*data_array.length)]; //рандомный выбор подмассива } Суть состоит в том, чтобы выводить по 3 (в данном случае) рандомных вопроса из списка, при этом каждый вопрос должен появляться на экране по одному и они не должны повторяться Функция рандома понятна. А вот как сделать так, чтобы вопросы не повторялись? Моё предположение: Создать еще один пустой массив, в который будут записываться использованные подмасивы. При каждом обороте цикла генерируется новый вопрос, а затем сравнивается со всеми подмассивами из второго массива, и если там нет такого элемента, то он выводится и заносится в этот дополнительный массив. Но как это реализовать, не подскажете? |
Хомяк,
перемешать массив, отрезать 3 ячейки |
var data_array = [ [1,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком1",3], [2,"Вопрос","Неверный ответ","Верный","Неверный ответ","ком2",2], [3,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком3",1], [4,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком4",3], [5,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком5",3], [6,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком6",1], ]; var newArr = data_array.slice().sort((a, b)=>Math.random() - 0.5); var i = 3; while(i--) console.log(newArr.pop()); если массив |
рони,
угу, мысль такая же |
Хомяк,
или сразу вынимать из массива, splice(rand,1) |
Хомяк,
//id вопроса, вопрос, варианты ответа, комментарий, номер правильного ответа var data_array = [ [1,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком1",3], [2,"Вопрос","Неверный ответ","Верный","Неверный ответ","ком2",2], [3,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком3",1], [4,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком4",3], [5,"Вопрос","Неверный ответ","Неверный ответ","Верный","ком5",3], [6,"Вопрос","Верный","Неверный ответ","Неверный ответ","ком6",1], ]; var prov = []; //пустой массив, в который будут записывать используемые подмассивы массива var p=0; //подсчёт количества правильных ответов var i=0; while (i++<3) //повторение цикла три раза 0-2 { var rand = Math.floor(Math.random()*data_array.length); //рандомный выбор индекса prov = prov.concat(data_array.splice(rand,1)) } console.log(prov) |
Хмм, спасибо
То есть мы как бы отрезаем этот элемент в другой массив, так? А как тогда организовать выбор вариантов? Я хотела через блоки, что-нибудь вроде такого (Хотя я, конечно не уверена, что это бы сработало) function check(num){ if(num == 0){ document.getElementById('answ1').style.display='block'; document.getElementById('answ2').style.display='block'; document.getElementById('answ3').style.display='block'; document.getElementById('question').style.display='block'; document.getElementById('answ1').innerHTML=data_array[cur_answer][1]; document.getElementById('answ2').innerHTML=data_array[cur_answer][2]; document.getElementById('answ3').innerHTML=data_array[cur_answer][3]; document.getElementById('question').innerHTML=data_array[cur_answer][1]; document.getElementById('start').style.display='none'; }else{ if( num == data_array[cur_answer][6]){ plus++; }else{ document.getElementById('result').innerHTML="Неверно!" + data_array[cur_answer][data_array[cur_answer][5]]; //вывод комментария } <p style="font-size: 14px;font-weight: bold;padding-top: 2px; line-height: 1.5; " id="question"></p> <button onclick="check(1)" class="knopka" id="answ1"></button> <button onclick="check(2)" class="knopka" id="answ2"></button> <button onclick="check(3)" class="knopka" id="answ3"></button> Для первого отрезанного это, наверное, сработало бы... а вот как с остальными. Или я неправильно поняла принцип @_@ |
Цитата:
|
Цитата:
|
Хомяк,
может написать фунциию которая создаёт блок вопроса? создали блок, ответили, создали новый, так три раза, ответы сохранили и вывели блок с результатами |
Часовой пояс GMT +3, время: 00:59. |