Javascript 使用for循环检查多个变量的内容

Javascript 使用for循环检查多个变量的内容,javascript,for-loop,variables,arguments,var,Javascript,For Loop,Variables,Arguments,Var,我有多个数组变量,其中包含一个问题和两个答案选项。它们用于改变问题的调查 var q1 = ["question","option1","option2"]; var q2 = ["question","option1","option2"]; ... var q8 = ["","",""]; var q9 = ["","",""]; 我希望能够自动更改用户通过的问题数量。我将这样做的方法是添加一个for循环来检查数组是否为空,如果数组为空,它将在之前完成对问题的调查 以下是我尝试过的: fo

我有多个数组变量,其中包含一个问题和两个答案选项。它们用于改变问题的调查

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");
    }
}
但是,它将选择第一个可用选项(1)。使用==或===使qi未定义。如何使用for循环检查所有数组变量是否为空?我需要一种方法,每次循环运行时增加第二位数字,然后将其作为变量读取


我可以用一个很长的if语句,但是如果我有更多的问题,那将是一件痛苦的事情。

你可以检查数组的内容,看看它是否包含空字符串,因为我使用了
join
附加所有空字符串,并将其变成一个空字符串,然后与空字符串引用进行比较

一旦我们找到一个空字符串,我们就停止并退出循环,在遇到空数组的地方打印第i个问题。假设您以有序的方式传递问题数组,使得具有空字符串的问题数组位于末尾

var q1=[“问题”、“选项1”、“选项2];
风险值q2=[“问题”、“选项1”、“选项2”];
变量q3=[“”,“”,“”];
变量q4=[“”,“”,“”];
var问题=[q1、q2、q3、q4];
功能检查问题(问题){

对于(设i=0;i你不能真正“动态”循环那样的变量。我会尝试将所有问题放入一个数组中,并将每个问题及其答案放入一个对象中:

<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)
}


变量问题=[
{
问题:“问题1”,
答复:[
“答复1”,
“答复2”
]
},
{
问题:“问题2”,
答复:[
“答复1”,
“答复2”
]
},
{
问题:“问题3”,
答复:[
“答复1”,
“答复2”
]
}
];
功能渲染器问题(提问器){
var html='';
var container=document.getElementById(“#根”);
提问发起人姓名(功能(提问对象){
if(questionObj.question&&questionObj.answers.length){
//做你的工作来创建每个问题和答案
}
}); 
//将最终html附加到父级
container.appendChild(html)
}

好的,但是变量仍然是一个一个提到的。这是唯一的方法吗?@Marcus你可以传递任意数量的变量,我从
参数数组中获取它们。你也可以将一个变量数组传递给函数并使用扩展运算符。
检查问题(…[q1,q2,q3,q4])
。不,不要为此使用
eval
。更好,尽管我看不出有任何理由在这里使用扩展语法和
参数
对象。或者将
q
数组作为单个参数传递,或者使用rest语法并调用
检查问题(q1、q2、q3、q4)
。感谢您的编辑!数组的这种用法对我来说太复杂了。您的代码还提供了一个语法错误。“您不能真正“动态”循环那样的变量”--您可以使用
eval()
以实现这种功能。我不知道您是如何生成问题的,但我会使用数组。我添加了更多的代码供您使用…“我有多个变量”-这是您的问题。永远不要使用带有枚举名称的变量-改为使用数组,如
var q=[q1,q2,q3,…]
然后您就可以轻松地迭代这些问题了。
<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)
}