繁体   English   中英

遍历索引数组内的关联数组

[英]Iterate over associative arrays inside an indexed array

我正在学习JS,必须做一个琐事游戏,每个问题有4个可能的答案。 这些问题以字符串“#”(分隔问题)和“ @”(分隔每个问题的ID,文本和正确答案)的形式提供给我。 对于答案,我有一个具有类似格式的字符串:idQuestion @ idAnswer @ textOfAnswer#我知道我以一种非常不稳定的方式(我正在使用4个数组!._。)做到这一点,但是我想不出另一种方式它。 这是我从包含答案的字符串开始的代码,然后将每个答案转换为“关联数组”,该数组保存在索引的答案中……称为assocAnswers (wtf xD):

var indexAnswers = strAnswers.split("#");
var auxArray = new Array ();
var auxArray2 = new Array();
var assocAnswers = new Array ();
for (var b=0; b<indexAnswers.length; b++){
    auxArray = indexAnswers[b].split("@");
    auxArray2 = {
        "idQuestion":auxArray[0],
        "idAnswer":auxArray[1],
        "txtAnswer":auxArray[2]
    }
    assocAnswers.push(auxArray2);
}

我想知道如何管理idQuestion的值(它是每个“关联数组”中占据索引数组一个元素的第一个键)是否等于x数。 检查完之后,我必须找到与idQuestion匹配的其余3个答案,并在div中显示四个答案(因此,我必须显示键txtAnswer的值),每个答案都在一个<label>无线电输入,但是我认为我不需要jQuery部分的帮助。 顺便说一句,我还没有学习for ... in循环,因此,如果有人将其用于可能的解决方案,那么对此的任何解释都将受到欢迎:P谢谢!

编辑:英语中的strQuestions的一些示例(strAnswers仍为西班牙语):

var strQuestions = "1@How is a function without parameters declared?@2#"
+ "2@Which of the next invocations is right?@4#"
+ "3@Given a function: myFunction(a,b) Which is the correct invocation?@3#";

var strAnswers =
"1@1@ function:myFunction()#1@2@ function myFunction()#1@3@ declare myFunction()#1@4@ new myFunction#2@1@Resultado=myFunction#2@2@Call myFunction()#2@3@myFunction#2@4@Resultado=myFunction()#3@1@MiFuncion a,b#3@2@a=MiFuncion(b)#3@3@MiFuncion(x,y)#3@4@Ninguna de las anteriores#

让我看看我是否正确理解您的问题...

我知道我以非常不稳定的方式做到了(我正在使用4个数组!._。),但是我想不出另一种方式来做到这一点。

var data = '1@1@hello#2@1@foo#1@2@world';

var questions = data.split('#').map(function(q) {
  q = q.split('@');
  return {
    idQuestion: q[0],
    idAnswer: q[1],
    text: q[2]
  };
});

现在,您的对象具有key:value对。 这样可以按任何条件进行过滤:

var filteredQuestions = questions.filter(function(q) {
  return q.idQuestion == 1;
});

console.log(filteredQuestions); //=> [{...text: "hello"}, {...text: "world"}]

这是您要找的东西吗?

var indexAnswers = strAnswers.split("#");
var auxArray = new Array ();
var auxArray2 = new Array();
var assocAnswers = new Array ();
for (var b=0; b<indexAnswers.length; b++){
    auxArray = indexAnswers[b].split("@");
    if (auxArray[0].toString() == someId.toString()) {
        ... Fill your page
    }
}

我在编写它的时候很懒,但是这个提琴手将展示如何解析它,并将它变成对象数组,以便您可以更轻松地使用它。 还有一种方法可以根据元素的集合和ID轻松找到该元素。

for循环可能有更好的方法,但我暂时无法想到。 如果我记得的话,我会更新它。

JSfiddler

注意:anwserId存储在.key属性中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM