2008-12-07 6 views
2

Au moyen d'une expression régulière et Greasemonkey j'ai un tableau de résultats qui ressemble à:
choice1, choice2, choice3, choice3, choice1, etc..Résultats de comptage dans un tableau

Ma question est comment puis-je correspondre les choix donc je sais combien de fois choix1 est dans le tableau, choice2 est dans le tableau, etc. si je ne sais pas exactement combien de choix il y a ou ce qu'ils sont.

Le but ultime est de créer un script Greasemonkey qui stocke le nombre de voix chaque choix obtient sur plusieurs pages (probablement à l'aide gm_setvalue bien que je suis ouvert à d'autres idées.)

Merci à!

Répondre

2

Une technique serait de itérer sur les choix et incrémenter un compteur associé à chaque choix unique dans une propriété d'objet.

Exemple:

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 

Vous avez alors un objet avec des propriétés égal au nombre de fois que la propriété existait dans le tableau.

+0

Cela fonctionne parfaitement. Je vous remercie! – Sean

1

Pas 100% sûr de ce que vous cherchez, mais je pense que c'est ça.

// 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; 

Sortie:

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

Quelques suggestions: - Notez que le var "result" devrait être un objet, pas un tableau, car l'utilisation de propriétés d'objet sur un tableau est souvent source de confusion. - Il est conseillé d'utiliser hasOwnProperty lors de l'utilisation de la construction for..in. –

+0

- La construction for..in peut ne pas fonctionner comme vous le souhaitez sur le tableau "choices". - L'instruction if devrait vraiment vérifier si === undefined, plutôt que de se fier à (undefined == null) étant vrai. –

+0

Merci, j'ai fait un petit edit de vos suggestions –

0

Trier le tableau premier, alors vous pouvez faire un balayage unique à compter les occurrences (semblable à la suggestion de Ryan ci-dessus).