1

我正在学习 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 中显示四个答案(所以我必须显示 key 的值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

3 回答 3

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"}]
于 2013-06-14T19:12:19.860 回答
0

我在写它的时候很懒,但是这个提琴手会告诉你如何解析它,然后把它变成一个对象数组,这样你就可以更容易地使用它。还有一种方法可以根据集合和元素的 id 轻松找到元素。

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

JSfiddler。_

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

于 2013-06-14T20:18:39.980 回答
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
    }
}
于 2013-06-14T19:09:52.023 回答