Question

J'ai un tableau:

var locations = ['Afghanistan','Albania','Algeria','New York'];

et une chaîne:

var string = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';

Je souhaite compter le nombre de fois que chaque mot clé du tableau apparaît dans la chaîne, mais je ne peux pas trouver le meilleur moyen de le faire.

Était-ce utile?

La solution

Voici ma version:

function countItems(a, s) {
    var x, i, output = {};
    for (x = 0; x < a.length; x++) {
        i = 0;
        output[a[x]] = 0;
        while ((i = s.indexOf(a[x], i)) > -1) {
            output[a[x]]++;
            i++
        }
    }
    return output;
}

var result = countItems(locations, string);
// result['Albania'] === 0

Essayez-le ici .

Autres conseils

Essayez quelque chose comme ça. Vous pouvez modifier ce que vous faites avec count - stockez-le dans un autre tableau, affichez-le (comme le fait ce script), etc.

var locations = ['Afghanistan','Albania','Algeria','New York'];
var str = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';


for(var i=0; i<locations.length; i++) {
    var pattern = new RegExp(locations[i], "g");
    var m = str.match(pattern);
    if (m != null)
    {
       var count = m.length; // the count
       alert("There are " + count + " occurrences of " + locations[i]);
    }
}
<script language="JavaScript">
var locations = ['Afghanistan','Albania','Algeria','New York'];

var string1 = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';

for (var i=0;i<locations.length;i++) {
  nCount = string1.split(locations[i]).length-1;
  document.write(locations[i] + ' is found ' + nCount + ' times<br>');
}

</script>

Ce code instancie uniquement un RegExp et utilise une boucle While en boucle. Je suis sûr que c'est aussi rapide que possible sans enfreindre les lois de la physique:)

C’est ce qui se passe:

  1. Construit une chaîne d'expression régulière à l'aide d'une boucle While While
  2. Créez un seul objet RegExp et match () dans la chaîne
  3. Compter la longueur du tableau renvoyé par la fonction match ()

Voici la mise en œuvre:

var countries = ["Afganistan", "America", "Island"];
var sentence = "I love Afganistan, America.. And I love America some more";

function countOccurrences(a, s)
{
    var re = "",
        l = a.length,
        m;

    while (l)
    {
        l--;

        re += a[l];

        if (l > 0) re += "|";
    }

    m = s.match(new RegExp(re, "gi")) || [];

    return m.length;
}

Remarque: je m'attends bien entendu à ce que les entrées du tableau soient nettoyées pour tous les caractères spéciaux qui briseront l'expression régulière construite dans la fonction.

var occurrences = function countOccurrences(countries, sentence); // returns 3
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top