Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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 (в данном случае) рандомных вопроса из списка, при этом каждый вопрос должен появляться на экране по одному и они не должны повторяться

Функция рандома понятна. А вот как сделать так, чтобы вопросы не повторялись? Моё предположение: Создать еще один пустой массив, в который будут записываться использованные подмасивы. При каждом обороте цикла генерируется новый вопрос, а затем сравнивается со всеми подмассивами из второго массива, и если там нет такого элемента, то он выводится и заносится в этот дополнительный массив. Но как это реализовать, не подскажете?
Ответить с цитированием
  #2 (permalink)  
Старый 13.06.2018, 00:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Хомяк,
перемешать массив, отрезать 3 ячейки
Ответить с цитированием
  #3 (permalink)  
Старый 13.06.2018, 00:51
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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());


если массив
Ответить с цитированием
  #4 (permalink)  
Старый 13.06.2018, 00:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
угу, мысль такая же
Ответить с цитированием
  #5 (permalink)  
Старый 13.06.2018, 00:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Хомяк,
или сразу вынимать из массива, splice(rand,1)
Ответить с цитированием
  #6 (permalink)  
Старый 13.06.2018, 01:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Хомяк,
//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)
Ответить с цитированием
  #7 (permalink)  
Старый 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>


Для первого отрезанного это, наверное, сработало бы... а вот как с остальными. Или я неправильно поняла принцип @_@
Ответить с цитированием
  #8 (permalink)  
Старый 13.06.2018, 02:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от рони
var rand = Math.floor(Math.random()*data_array.length); //рандомный выбор индекса
И будут повторения.
Ответить с цитированием
  #9 (permalink)  
Старый 13.06.2018, 08:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от laimas
И будут повторения.
откуда? элементы удаляются из массива, их нельзя выбрать повторно!

Последний раз редактировалось рони, 13.06.2018 в 08:52.
Ответить с цитированием
  #10 (permalink)  
Старый 13.06.2018, 08:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Хомяк,
может написать фунциию которая создаёт блок вопроса? создали блок, ответили, создали новый, так три раза, ответы сохранили и вывели блок с результатами
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти совпадения в массиве и добавить их в двумерный массив? Armen Общие вопросы Javascript 4 23.04.2015 13:27
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Проверка наличия в массиве с условием spo jQuery 3 05.01.2013 15:05
как найти и удалить массив из массива? FRIE Общие вопросы Javascript 8 14.03.2011 15:48
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37