13.06.2018, 00:44
|
Интересующийся
|
|
Регистрация: 13.06.2018
Сообщений: 11
|
|
Двумерный массив. Проверка есть ли подмасив массива в другом массиве
Здравствуйте, есть код
//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 (в данном случае) рандомных вопроса из списка, при этом каждый вопрос должен появляться на экране по одному и они не должны повторяться
Функция рандома понятна. А вот как сделать так, чтобы вопросы не повторялись? Моё предположение: Создать еще один пустой массив, в который будут записываться использованные подмасивы. При каждом обороте цикла генерируется новый вопрос, а затем сравнивается со всеми подмассивами из второго массива, и если там нет такого элемента, то он выводится и заносится в этот дополнительный массив. Но как это реализовать, не подскажете?
|
|
13.06.2018, 00:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Хомяк,
перемешать массив, отрезать 3 ячейки
|
|
13.06.2018, 00:51
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
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());
если массив
|
|
13.06.2018, 00:52
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
рони,
угу, мысль такая же
|
|
13.06.2018, 00:56
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Хомяк,
или сразу вынимать из массива, splice(rand,1)
|
|
13.06.2018, 01:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Хомяк,
//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)
|
|
13.06.2018, 02:09
|
Интересующийся
|
|
Регистрация: 13.06.2018
Сообщений: 11
|
|
Хмм, спасибо
То есть мы как бы отрезаем этот элемент в другой массив, так?
А как тогда организовать выбор вариантов?
Я хотела через блоки, что-нибудь вроде такого (Хотя я, конечно не уверена, что это бы сработало)
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>
Для первого отрезанного это, наверное, сработало бы... а вот как с остальными. Или я неправильно поняла принцип @_@
|
|
13.06.2018, 02:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от рони
|
var rand = Math.floor(Math.random()*data_array.length); //рандомный выбор индекса
|
И будут повторения.
|
|
13.06.2018, 08:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от laimas
|
И будут повторения.
|
откуда? элементы удаляются из массива, их нельзя выбрать повторно!
Последний раз редактировалось рони, 13.06.2018 в 08:52.
|
|
13.06.2018, 08:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Хомяк,
может написать фунциию которая создаёт блок вопроса? создали блок, ответили, создали новый, так три раза, ответы сохранили и вывели блок с результатами
|
|
|
|