Domanda

Tramite un'espressione regolare e Greasemonkey ho una serie di risultati che assomigliano a:
     scelta1, scelta2, scelta3, scelta3, scelta1, ecc.

La mia domanda è come posso valutare le scelte in modo da sapere quante volte la scelta1 è nella matrice, la scelta2 è nella matrice, ecc. se non so esattamente quante scelte ci sono o quali sono.

L'obiettivo finale è quello di creare uno script Greasemonkey che memorizzi il numero di voti che ogni scelta supera su più pagine (probabilmente usando gm_setvalue anche se sono aperto ad altre idee.)

Grazie!

È stato utile?

Soluzione

Una tecnica sarebbe quella di scorrere le scelte e incrementare un contatore associato a ciascuna scelta unica in una proprietà dell'oggetto.

Esempio:

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

Quindi hai un oggetto con proprietà pari al numero di volte in cui la proprietà è esistita nell'array.

Altri suggerimenti

Non sono sicuro al 100% di ciò che stai cercando, ma penso che sia così.

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

Output:

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

Ordina prima l'array , quindi puoi effettuare una singola scansione per contare le occorrenze (simile al suggerimento di Ryan sopra).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top