Question

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

Ma question est de savoir comment calculer les choix afin que je sache combien de fois choix1 est dans le tableau, choix2 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 votes que chaque choix obtient sur plusieurs pages (probablement en utilisant gm_setvalue bien que je sois ouvert à d’autres idées.)

Merci!

Était-ce utile?

La solution

Une technique consiste à parcourir 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 égales au nombre de fois où la propriété a existé dans le tableau.

Autres conseils

Vous n'êtes pas sûr à 100% de ce que vous recherchez, mais je pense que c'est le cas.

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

Résultat:

choice 1: 2
choice 2: 1
choice 3: 6
choice 4: 3

Triez d'abord le tableau , vous pouvez alors effectuer un balayage unique pour compter les occurrences (similaire à la suggestion de Ryan ci-dessus).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top