0
votes

Obtenir le numéro de chaque élément d'un tableau à l'aide d'une carte

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é.


0 commentaires

4 Réponses :


1
votes

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


1 commentaires

Cela aide, mais j'ai strictement besoin d'utiliser une carte pour mon cas malheureusement. Un conseil à cette fin serait-il vraiment utile?



0
votes

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)


11 commentaires

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



0
votes

Utilisation de la carte:

let contador = {};
appVersion.map(x => contador[x] = 1 + (contador[x] || 0));
console.log(contador);


0 commentaires

0
votes

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() );


3 commentaires

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