迭代索引数组中的关联数组

时间:2013-06-14 18:54:30

标签: javascript arrays loops key associative

我正在学习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>

3 个答案:

答案 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循环可能有更好的方法,但我现在无法想到它。如果我记得的话,我会更新它。

JSfiddler

注意:anwserId存储在.key属性