0
votes

Comment trier un tableau par fréquence d'occurrence?

J'ai un tableau comme ceci:

people = [
{id:1,name:'abc',age:18},
{id:3,name:'abce',age:18},
{id:4,name:'abcf',age:18},
{id:2,name:'abcd',age:20},
{id:5,name:'abcg',age:21},
{id:6,name:'abch',age:20},
{id:5,name:'abcg',age:21},
{id:7,name:'abci',age:17},
]


1 commentaires

Comptez la fréquence pour chaque âge, puis trier par elle.


4 Réponses :


4
votes

compter juste des âges et trier descendant par le comte.

p>

.as-console-wrapper { max-height: 100% !important; top: 0; }


9 commentaires

Cela ne doit-il pas exécuter réduire deux fois pour chaque élément de la matrice?


La réduction des visites de chaque élément de la matrice qu'une seule fois.


@paul comptage est le résultat après Réduire exécute.


La référence de tri le résultat du réduit, il ne l'appelle pas


Merci pour votre commentaire


@Zemzem, s'il vous plaît jeter un oeil à la modification, qui couvre maintenant l'ordre du même compte.


@Ninascholz oh wow c'est très propre. Cela signifie beaucoup pour moi bro !! . Mais je me demande si l'âge est une chaîne, comment faire de la sorte?


@Zemzem, tant que la valeur convertit sur un numéro, il n'y a pas de problème, car - convertit les deux opérandes en chiffres.


Si quelqu'un a un problème de tri ne fonctionne pas, il suffit d'ajouter de retour à la valeur de la fonction de tri



1
votes

Essayez ceci:

p>

let people = [{ id: 1, name: 'abc', age: 18 }, { id: 2, name: 'abcd', age: 20 }, { id: 3, name: 'abce', age: 18 }, { id: 4, name: 'abcf', age: 18 }, { id: 5, name: 'abcg', age: 21 }, { id: 6, name: 'abch', age: 20 }, { id: 7, name: 'abci', age: 17 }];
let tmpAge = {};
for (let i = 0; i < people.length; i++) {
  if (!tmpAge[people[i].age]) {
    tmpAge[people[i].age] = 1;
  } else {
    tmpAge[people[i].age]++;
  }
}
people.sort((a, b) => tmpAge[b.age] - tmpAge[a.age]);
console.log(people);


1 commentaires

Oui bien sûr !! Je vous remercie !!



0
votes
const people = [
  { id: 1, name: 'abc', age: 18 },
  { id: 2, name: 'abcd', age: 20 },
  { id: 3, name: 'abce', age: 18 },
  { id: 4, name: 'abcf', age: 18 },
  { id: 5, name: 'abcg', age: 21 },
  { id: 6, name: 'abch', age: 20 },
  { id: 7, name: 'abci', age: 17 },
];

const agesFrequency = people.reduce((previousValue, currentValue) => {
  const { age } = currentValue;

  return {
    ...previousValue,
    [age]: (
      previousValue[age] || 0
    ) + 1,
  };
}, {});

people.sort((
  (a, b) =>
    agesFrequency[b.age] - agesFrequency[a.age]
));

console.log(people);

0 commentaires

0
votes

Je l'ai résolu. Modifier la fonction Trier sur

people.sort((a, b) => {
    if (count[b.age] === count[a.age]) {
        if (b.age < a.age) {
            return -1;
        }
        if (b.age > a.age) {
            return 1;
        }
        return 0;
    } else if (count[b.age] < count[a.age]) {
        return -1;
    }
});


0 commentaires