J'essaie d'obtenir le nombre de fois où chaque élément de chaîne apparaît dans un tableau et de l'imprimer à l'aide d'une carte. Je lis essentiellement les données des fonctions Firebase, mais pour l'instant, j'utilise un tableau pour tester le code afin d'obtenir les occurrences de chaque élément. J'ai essayé le code suivant de ici , mais cela ne fonctionne pas et je ne sais pas pourquoi:
<script>
var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
var count = new Map();
appVersion.forEach(version=> count.set(count.get(version) + 1));
function show(versions) {
document.write(versions);
document.write("<br>");
}
count.forEach(show);
</script>
Toute aide ou conseil sera très apprécié.
4 Réponses :
Peut-être que cela aide
var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
let counter = {}
for (version of appVersion){
counter[version] = 1 + (counter[version] || 0)
}
console.log(counter);
Cela aide, mais j'ai strictement besoin d'utiliser une carte pour mon cas malheureusement. Un conseil à cette fin serait-il vraiment utile?
vous voudrez probablement ceci
comme indiqué dans les commentaires si vous voulez que l'objet final soit dans ce format: {'5011': 1, '5012': 3, '5021': 2}
vous pouvez utiliser réduire
var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"];
map=new Map
appVersion.forEach(o=>{
count=map.get(o)||0
map.set(o,count+1)
})
r=[...map].reduce((acc,curr)=>{
if (acc.length==0) {acc.push({[curr[0]]:curr[1]})}
else {acc[0][curr[0]]=curr[1]}
return acc
},[])
console.log(r)
C'est parfait, merci beaucoup. Cela aide beaucoup.
Si j'ai besoin d'imprimer les valeurs sans que cela ressemble à une chaîne Json, comment pourrais-je aborder cela? Quelque chose comme ceci: "5012: 3"
que veux-tu dire ? voulez-vous qu'il soit représenté comme une chaîne? Peux-tu me donner un exemple
Oui, simplement représenté sous forme de chaîne. 5012: 3 5021: 2
les voulez-vous dans un tableau?
quelque chose comme ceci: {"5011": 1, "5012": 3, "5021": 2}
Vous pouvez utiliser réduire pour parcourir chaque élément de la carte, puis les ajouter à un objet
J'ai mis à jour ma réponse et maintenant vous obtiendrez le résultat dans ce format, faites-moi savoir si c'est ce que vous voulez
Oui, c'est parfait, merci beaucoup pour votre temps et vos efforts, cela m'a vraiment aidé.
Juste une dernière chose, à quoi fait référence acc ?
c'est l ' accumulateur , curr est pour courant
Utilisation de la carte:
let contador = {};
appVersion.map(x => contador[x] = 1 + (contador[x] || 0));
console.log(contador);
Voir ci-dessous
var appVersion= ["5012", "5021", "5012", "5011", "5012", "5021"]; var count = new Map(); appVersion.map( (version) => count.get( version) != undefined ? count.set( version, count.get( version) + 1 ) : count.set( version, 1 ) ); console.log( [...count].sort() );
comment pourrais-je représenter la sortie comme quelque chose comme ceci: quelque chose comme ceci: {"5011": 1, "5012": 3, "5021": 2}
Je vois, mais la sortie est toujours dans ce format: [ ["5011", 1], ["5012", 3], ["5021", 2]] Alors que je cherche quelque chose comme ceci: {"5011": 1, "5012": 3, "5021": 2} Désolé pour le mauvais format, les commentaires ne me permettent pas de le formater correctement
Je m'excuse pour le problème, je l'ai essayé moi-même, mais je suis coincé avec le format