Проверьте содержимое нескольких переменных, используя цикл for - PullRequest
0 голосов
/ 22 января 2019

У меня есть несколько переменных массива, которые содержат вопрос, и два варианта ответа.Они используются для опроса, который меняет вопросы.

var q1 = ["question","option1","option2"];
var q2 = ["question","option1","option2"];
...
var q8 = ["","",""];
var q9 = ["","",""];

Я хочу, чтобы я мог автоматически изменять количество вопросов, через которые проходит пользователь.Я сделаю это, добавив цикл for, который проверяет, является ли массив пустым, и если массив пуст, он завершит опрос по этому вопросу раньше.

Вот что япробовал:

for (i = 1; i < 9; i++) {
    if ("q"+i = ["","",""]) {
        console.log("Stopped at "+i);
        finishSurvey():
        i = 9; //Stop for-loop
    } else {
        console.log("Error");
    }
}

Проблема здесь в левой части аргумента if, я также пробовал это:

if (qi = ["","",""]) {

Однако тогда он выберет первый доступный вариант (1),Использование == или === делает ци неопределенной.Как я могу проверить все переменные массива на пустоту, с помощью цикла for?Мне нужен был бы способ увеличивать вторую цифру каждый раз, когда цикл запускается, и затем читать ее как переменную.

Я мог бы сделать это с длинным предложением if, но если бы у меня было больше вопросовтогда это будет боль.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вы не можете действительно «динамически» перебирать такие переменные.Я бы попытался бросить все вопросы в один массив и поместить каждый из них вместе с ответами в объект:

<div id="root"></div>


var questions = [
  {
    question: "question 1",
    answers: [
      "answer 1",
      "answer 2"
    ]
  },
  {
    question: "question 2",
    answers: [
      "answer 1",
      "answer 2"
    ]
  },
   {
    question: "question 3",
    answers: [
      "answer 1",
      "answer 2"
    ]
  }
];


function renderQuestions(questionsArr) {
   var html = '';
   var container = document.getElementById("#root");

   quesaionsArr.forEach(function(questionObj) {
     if (questionObj.question && questionObj.answers.length) {
       // do your work to create each question and answer 
     }
   }); 

   // append final html to parent
   container.appendChild(html)
}

0 голосов
/ 22 января 2019

Вы можете проверить содержимое массива, чтобы увидеть, содержит ли он пустые строки, для этого я использовал join, чтобы добавить все пустые строки и превратить их в одну, а затем сравнить с пустой строкой.

Как только мы находим пустую строку, мы останавливаемся, выходим из цикла и выводим i-й вопрос, где мы столкнулись с пустым массивом.Предполагая, что вы передаете массивы вопросов упорядоченным образом, так что массив вопросов с пустыми строками находится в конце.

var q1 = ["question","option1","option2"];
var q2 = ["question","option1","option2"];
var q3 = ["","",""];
var q4 = ["","",""];
var questions = [q1, q2, q3, q4];

function checkQuestions(questions){
 for(let i =0; i<questions.length;i++){
   if(questions[i].join("") === ""){
      console.log("stopped at question "+(i+1));
      break;
    }
  } 
}
checkQuestions(questions);
...