[英]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
循环可能有更好的方法,但我暂时无法想到。 如果我记得的话,我会更新它。
注意:anwserId存储在.key
属性中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.