pour la première étape pour calculer
{
oranges: 4,
bananas: 2,
apples: 1
}
vous pouvez utiliser la fonction countBy de underscroe.js
var all=["apples", "oranges", "oranges", "oranges", "bananas", "bananas", "oranges"];
var frequency=_.countBy(all,function(each){return each});
si frequency
objet contiendra la fréquence de toutes les valeurs uniques, et vous pouvez obtenir une liste unique, simplement appelant _.uniq(all)
, et de trier cette liste unique, par la méthode de _.sortBy
underscore et en utilisant votre objet frequency
vous pouvez utiliser
_.sortBy(_.uniq(all),function(frequencyKey){return -frequency[frequencyKey]});
-ve
Le signe est utilisé ici pour trier la liste dans l'ordre décroissant au moyen de la valeur de fréquence selon vos besoins.
Vous pouvez consulter la documentation de la http://underscorejs.org/ pour une optimisation plus poussée par votre propre truc :)
vaut peut-être la mise en cache array.length au lieu de vérifier sur chaque itération – second
@second - c'est une bonne optimisation pour les grands ensembles de données. Certains navigateurs peuvent déjà le faire en interne. – Anurag
C'est probablement aussi élégant que vous trouverez. – palswim