如何测试关联数组中是否存在id

时间:2014-07-02 13:29:41

标签: javascript

我开始使用javascript。我试图做一个小程序,对文本文档中的答案数进行统计。

情况如下:每个问题都有一个ID,例如8000001W如果答案是好的,或R如果答案不好,例如对于用户答案是{{ 1}}。我有很多用户这么多同一个id的问题。我希望每个问题能得到很多好的答案。例如:800001有8000001W

我已将答案分为W: 24 and "R": 5的{​​{1}}和id8000001的{​​{1}}。我想创建一个关联表来获取ans。但我阻止了这一点。我试过这段代码:

W

3 个答案:

答案 0 :(得分:0)

对于"关联数组"在JavaScript中,使用常规对象。在下面的代码中,"结果"是这些对象之一。它有两个键," W"和" R"这指向从0开始的数字。只需遍历你的答案数组并不断递增正确的密钥。

有两种方法可以访问对象中的键:1)使用括号,2)使用" dot"符号。在循环中,我使用括号,因为'键'是一个变量 - 它将解析为" W"或" R"因此访问" W"或" R"关键在于那个对象。在最后两行中,我使用点符号,因为" W"和" R"字面上是我想要访问的键。如果我这样做,它也会有效:results['W']++results['R']++

var tab = [];
tab[0] = ['8000001W', '8000002W', '8000003W', '8000004R', '8000005W', '8000006R'];       
tab[1] = ['8000001R', '8000002W', '8000003R', '8000004W', '8000005R', '8000006W'];

var results = {
  W: 0,
  R: 0
};

// go through each tab
for (var tabIdx = 0; tabIdx < tab.length; tabIdx++) {

  // go through each answer and apppend to an object that keeps the results
  for (var i = 0; i < tab[tabIdx].length; i++) {
    var answer = tab[tabIdx][i];

    // the last character in the string is the "key", (W or R)
    var key = answer.slice(-1);

    // append to the results object
    results[key]++;
  }
}

console.log(results);

console.log(results.W);   // 7
console.log(results.R);   // 5

打开您的开发控制台(在Chrome浏览器上的F12)以查看输出。

答案 1 :(得分:0)

根据您最终的想法,问题&#39;应该用作对象文字,定义为question = {}(类似于关联数组),这里定义的是数组文字。您可以在此处查看有关JavaScript中不同类型文字的更多信息:

https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Literals

就您的代码而言,您可以这样做:

if (question[id]) {
    question[id][ans] += 1;
}
else {
    var rep = initResp(ans);
    question[id] = rep;
}

您的&#39; initResp&#39;函数更好地返回一个对象文字&#39; rep&#39;而不是数组文字:

function initResp(t){
    var rep = {};
    rep.W = (t=='W'?1:0);
    rep.R = (t=='R'?1:0);
    return rep;
}

答案 2 :(得分:0)

这就是我如何解决关联数组的问题。

var tab = [];
tab[0] = ['8000001W', '8000002W', '8000003W', '8000004R', '8000005W', '8000006R'];       
tab[1] = ['8000001R', '8000002W', '8000003R', '8000004W', '8000005R', '8000006W'];
tab[2] = ['8000001R', '8000002W', '8000003R', '8000004W', '8000005R', '8000006W'];
var question = {};


for (var tabIndex = 0; tabIndex < tab.length; tabIndex++) {


  for (var i = 0; i < tab[tabIndex].length; i++) {
    var answer = tab[tabIndex][i];

    var id = answer.slice(0,7);
    var ans = answer.slice(-1);

    if (question[id]) {
      question[id][ans] += 1;
     }else {
        var results = initResp(ans);
        question[id] = results;
       }

  }
}
console.log(question);


function initResp(t) {
    var results = [];
    results.W = (t === 'W' ? 1 : 0);
    results.R = (t === 'R' ? 1 : 0);
    //console.log(results);
    return results;
}