Actuellement, j'ai un tableau comme ça:
var uniqueCount = Array();
Après quelques étapes, mon tableau ressemble à ça:
uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];
Comment puis-je compter combien de a, b, c y a-t-il dans le tableau? Je veux avoir un résultat comme:
a = 3
b = 1
c = 2
d = 2
etc.
javascript
arrays
detno29
la source
la source
{}
, pas une programmation fonctionnellemap
.Réponses:
Démo Fiddle
Vous pouvez également utiliser des fonctions d'ordre supérieur pour effectuer l'opération. Voir cette réponse
la source
for (var i = 0; i <= array_elements.length; i++) {
ou à la<=
place de<
.la source
counts[x] || 0
renvoie la valeur decounts[x]
si elle est définie, sinon0
. Ensuite, ajoutez-en un et réinstallez-le dans l'objet et le décompte est terminé.reduce
:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
Quelque chose comme ça:
Utilisez une simple boucle for au lieu de forEach si vous ne voulez pas que cela se brise dans les anciens navigateurs.
la source
uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
Je suis tombé sur cette (très ancienne) question. Fait intéressant, la solution la plus évidente et la plus élégante (à mon humble avis) manque: Array.prototype.reduce (...) . Tous les principaux navigateurs prennent en charge cette fonctionnalité depuis environ 2011 (IE) ou même avant (tous les autres):
la source
Ligne unique basée sur la fonction de réduction du tableau
la source
Simple c'est mieux, une variable, une fonction :)
la source
Je pense que c'est le moyen le plus simple de compter les occurrences avec la même valeur dans le tableau.
la source
la source
Personne ne répondant ne semble utiliser le
Map()
module intégré pour cela, qui a tendance à être mon choix combiné avecArray.prototype.reduce()
:Nb, vous devrez polyfill
Map()
si vous souhaitez l'utiliser dans des navigateurs plus anciens.la source
get
et lesset
fonctions viennent de l'Map
objet. Mais l'accumulateur initial n'est pas un objet Map, alors pourquoi la version réduite du réducteur en prend-elle un?Map
objet; voir le deuxième argument de la réduction.Map.prototype.set
renvoie l'objet de la carte etMap.prototype.get
renvoieundefined
la valeur de la clé qui lui est fournie. Cela nous permet d'obtenir le décompte actuel de chaque lettre (ou0
s'il n'est pas défini), puis l'incrémenter de un, puis définir le décompte de cette lettre sur le nouveau décompte, qui renvoie la carte et devient la nouvelle valeur de l'accumulateur.Vous pouvez avoir un objet qui contient des comptes. Parcourez la liste et augmentez le nombre de chaque élément:
la source
counts[element] || 0
?counts[element]
retours,undefined
car la propriété n'a pas encore de valeur. Si vous essayez ensuite d'ajouterundefined + 1
, vous vous retrouverez avec NaN . Le(count[element] || 0)
remplacera leundefined
par0
ainsi l'ajout1
produit1
au lieu deNaN
. ECMAScript 2020 ajoute l'opérateur de fusion nul??
qui fait une chose similaire mais est un peu plus explicite qu'il utilise la deuxième valeur lorsque la première estundefined
(ounull
). Cette version serait(counts[element] ?? 0) + 1
.Vous pouvez le résoudre sans utiliser de boucles for / while ou forEach.
J'espère que cela vous aide!
la source
la source
Vous pouvez faire quelque chose comme ça:
maintenant vous avez une carte avec tous les personnages comptent
la source
la source
Dupliques dans un tableau contenant des alphabets:
Duplique dans un tableau contenant des nombres:
la source
var testArray = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h ',' h ',' h ',' e ',' a '];
la source
la source
simplifié sheet.js answare
la source
Une combinaison de bonnes réponses:
J'espère que c'est utile.
la source
}
la source
En utilisant array.map, nous pouvons réduire la boucle, voir ceci sur jsfiddle
Tester:
la source
la source
Créez un fichier par exemple
demo.js
et exécutez-le dans la console avec nodedemo.js
et vous obtiendrez l'occurrence des éléments sous forme de matrice.Vous obtiendrez le résultat dans la console comme ci-dessous:
la source
La façon la plus rapide:
Сomputational complexité est O (n).
Le code le plus court:
Utilisez ES6.
la source
la source
Déclarez un objet
arr
pour contenir l'ensemble unique en tant que clés. Remplissezarr
en boucle dans le tableau une fois à l'aide de map. Si la clé n'a pas été trouvée précédemment, ajoutez la clé et attribuez une valeur de zéro. À chaque itération, incrémentez la valeur de la clé.TestArray donné:
Solution:
JSON.stringify(arr)
sortiraObject.keys(arr)
reviendra["a","b","c","d","e","f","g","h"]
Pour trouver les occurrences de n'importe quel élément, par exemple, b
arr['b']
affichera2
la source
C'est simple en javascript en utilisant la méthode de réduction de tableau:
la source
Usage:
CODE:
Fragment
la source