我正在学习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数。
一旦我检查了这一点,我必须找到剩余的3个答案并且也匹配idQuestion,并在div中显示四个答案(所以我必须显示键txtAnswer
的值),每个答案都在{ {1}}在收音机输入中,但我认为我不需要jQuery部分的帮助。顺便说一句,我还没有学习for ... in循环,所以如果有人用它来寻找可能的解决方案,那么对此的任何解释都会受到欢迎:P谢谢!
编辑:英语中strQuestions的一些例子(strAnswers仍然是西班牙语):
<label>
答案 0 :(得分:1)
让我看看我是否正确理解你的问题......
我知道我是以非常不稳定的方式做到的(我正在使用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]
};
});
现在您的对象具有键:值对。这是您可以按任何标准过滤的方式:
var filteredQuestions = questions.filter(function(q) {
return q.idQuestion == 1;
});
console.log(filteredQuestions); //=> [{...text: "hello"}, {...text: "world"}]
答案 1 :(得分:0)
这是你要找的吗?
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
}
}
答案 2 :(得分:0)
我在编写它时非常懒惰,但是这个小提琴手将展示如何解析它并将其转换为一个对象数组,以便您可以更轻松地使用它。还有一种方法可以根据集合和元素的id轻松找到元素。
对for
循环可能有更好的方法,但我现在无法想到它。如果我记得的话,我会更新它。
注意:anwserId存储在.key
属性