2014-07-02 83 views
-1

我是從JavaScript開始的。我試圖做一個小程序,對文本文檔中找到的答案數進行統計。如何測試一個id是否存在於一個關聯數組中

的情況是這樣的:每個問題都有一個ID,e.g 8000001W如果答案是好還是R如果回答不好,e.g爲用戶的答案是8000001W。我有很多用戶對同一個ID有這麼多問題。每個問題我想得到很多好的答案。例如:800001有W: 24 and "R": 5

我有答案分成id8000001ansWR。我想創建一個關聯表來獲得question[id]=["W": 0, "R": 0]。但我在這方面阻止。我試過這段代碼:

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


for (var i=0;i<tab.length;i++) { 
     document.write("<dl><dt>tableau n° "+i+"<\/dt>"); 
     for (var propriete in tab[i]) { 
     id = tab[i][propriete].slice(0,7); 
     var ans = tab[i][propriete].slice(7,8); 
     question[id] = []; 
     if(question[id]){ 
      incrementResp.call(rep, ans); 
     }else{ 
      var rep = initResp(ans); 
      question[id] = rep; 
     }  
    } 
    document.write("<\/dl>"); 
} 

function incrementResp(type){ 
    this.this++; 
} 
function initResp(t){ 
    rep = []; 
    rep.W = (t=='W'?1:0); 
    rep.R = (t=='R'?1:0); 
} 
+1

''標籤怎麼了? – j08691

+0

原諒它是爲了計算器。這不是在我的代碼 – rodolphe

+0

不知道你在問什麼,但嘗試使用通用對象{},你可以檢查一個屬性是否存在'if(tab ['id']){ /*做些什麼*/ } ' – user1094553

回答

0

基於什麼你想最後的「問題」應作爲對象常量,定義爲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; 
} 

而且你的「initResp」功能更好地返回一個對象字面'rep',而不是數組字面:

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

'if(question [id]){'should'if(id正在問題){'因爲'{}'被評估爲'true'。請參閱if({})console.log(「a」);'。 –

+0

感謝您的澄清。但在這種特殊情況下,我們永遠不會以'question [id] = {}'結束,它可能是'question [id] = {W:0,R:0}'或'question [id] = undefined'。 – wpding

+0

然後,您可以刪除'else'塊和'initResp'函數。你應該在你的答案中編輯'question [id] = {W:0,R:0}'。 –

0

對於JavaScript中的「關聯數組」,請使用常規對象。在下面的代碼中,「結果」就是這些對象之一。它有兩個鍵,「W」和「R」,指向從0開始的數字。只需遍歷您的答案數組並連續遞增正確的鍵。

有兩種方法可以訪問對象中的一個鍵:1)使用括號,2)使用「點」符號。在循環中我使用括號,因爲'key'是一個變量 - 它將解析爲「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)查看輸出。

+0

這我已經做到了。但我的問題我不想得到所有「W」和「R」的總和。但每個問題的總數。例如800001R,800001W,800001R,800001W,800001W,結果爲800001 R = 2和W = 3 – rodolphe

+0

感謝您的回答 – rodolphe

+0

沒問題,我已經更新了我的答案。現在這些值是從零開始的數字,並且在循環中遞增。 – Mike

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; 
} 
相關問題