2008-12-07 74 views
2

用正則表達式和Greasemonkey的我有結果的排列,看起來來像:
choice1, choice2, choice3, choice3, choice1, etc..計數結果

我的問題是我如何從中總結出選擇,所以我知道有多少次選擇1在數組中,choice2在數組中,等等,如果我不確切地知道有多少選擇或者它們是什麼。

的最終目標是創建一個存儲每個選擇得到了多頁的票數Greasemonkey的腳本(可能使用gm_setvalue雖然我開到其他的想法。)

謝謝!

回答

2

的一種技術將迭代選擇和遞增的對象屬性關聯到每個獨特的選擇的計數器。

實施例:

var choiceCounts = {}; 
for (var iLoop=0; iLoop < aChoices.length; iLoop++) { 
    var keyChoice = aChoices[iLoop]; 
    if (!choiceCounts[keyChoice]) { 
    choiceCounts[keyChoice] = 1; 
    } else { 
    choiceCounts[keyChoice]++; 
    } //if 
} //for 

然後,您有等於該屬性在陣列中存在的次數屬性的對象。

1

不是100%確定你在找什麼,但我認爲就是這樣。

// Original data 
    var choices = [ 
     "choice 1", 
     "choice 1", 
     "choice 2", 
     "choice 3", 
     "choice 3", 
     "choice 3", 
     "choice 3", 
     "choice 3", 
     "choice 3", 
     "choice 4", 
     "choice 4", 
     "choice 4"]; 


    //Create the results array 
    var result = new Object(); 

    for (var choice in choices) { 
     if (result[choices[choice]] === undefined) 
      result[choices[choice]] = 1; 
     else 
      result[choices[choice]]++; 
    } 

    //Print result 
    var str = ""; 

    for (var item in result) 
     str += item + ": " + result[item] + "<br />"; 


    document.getElementById("resultDiv").innerHTML = str; 

輸出:

choice 1: 2 
choice 2: 1 
choice 3: 6 
choice 4: 3 
+0

一些建議: - 請注意,「結果」var應該是一個對象,而不是一個數組,因爲在數組上使用對象屬性常常會使事情混淆。 - 使用for..in構造時,最好使用hasOwnProperty。 – 2008-12-07 20:46:54

+0

- for..in構造可能無法像您期望的「選擇」數組一樣工作。 - if語句應該確實檢查=== undefined,而不是依賴(undefined == null)爲true。 – 2008-12-07 20:48:03

0

排序數組第一,那麼你可以做一個單一的掃描計數(以上類似Ryan的建議)出現。