我开始使用javascript。我试图做一个小程序,对文本文档中的答案数进行统计。
情况如下:每个问题都有一个ID,例如8000001
和W
如果答案是好的,或R
如果答案不好,例如对于用户答案是{{ 1}}。我有很多用户这么多同一个id的问题。我希望每个问题能得到很多好的答案。例如:800001有8000001W
。
我已将答案分为W: 24 and "R": 5
的{{1}}和id
或8000001
的{{1}}。我想创建一个关联表来获取ans
。但我阻止了这一点。我试过这段代码:
W
答案 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;
}