Underscore.js: Somme des éléments d'une collection
J'ai fait une petite plnkr ici pour montrer ce que je suis en train de réaliser. J'ai un gros jeu de données, où j'aime à somme le type à obtenir un total.
Que je pouvais penser de retravailler et d'ajouter les résultats à un objet de hachage, mais merveille de façon plus élégante de le résoudre avec un trait de soulignement. Je suis à l'aide de underscore.js mais jamais essayé la carte de réduire ou d'autres paradigme fonctionnel. Veuillez mettre à jour les plnkr pour apprendre comment faire cela.
http://plnkr.co/edit/B5HGxhwvWsfvOR97z7TL?p=preview
var data = [ {'type': "A", 'val':2},
{'type': "B", 'val':3},
{'type': "A", 'val':1},
{'type': "C", 'val':5} ];
_.each(data, function (elm, index) {
console.log(elm);
});
/*
Desired output
out = [ {'type': "A", 'total':3},
{'type': "B", 'total':3},
{'type': "C", 'total':5} ];
*/
Vous devez vous connecter pour publier un commentaire.
DÉMO
groupBy
va introduire un peu juste de la surcharge dans la construction de tous ces tableaux pour un grand ensemble de donnéesÀ peu près la même réponse que @GregL, juste avec un peu plus de trait de soulignement:
reduce()
donne sur 4.84 opérations par seconde, contre 3,5 ops/sec pour ma version.reduce
appelreduce
appeler jsperf.com/summing-per-type/2Ce qui suit fonctionnera, mais je suppose que c'est similaire à ce que vous aviez à l'esprit. L'avantage est que par l'utilisation d'un objet de hachage pour stocker les totaux, vous êtes l'indexation sur le type qui signifie que vous n'avez pas à parcourir le hachage de chaque de temps à essayer de trouver l'objet avec le type de droit. Ensuite, vous itérer à travers elle une fois à la fin de construire jusqu'à la sortie finale de tableau.
Plunkr est ici.
Code est comme suit:
EDIT: j'ai créé un nouveau plunkr qui génère de façon rapide, c'est même un de 1 million d'élément de tableau (avec 6 types possibles) ici. Comme vous pouvez le voir à partir de la sortie de la console, au moins dans google Chrome Canary, il fonctionne dans environ 1/3 de seconde.
J'ai aussi fait un jsPerf test pour combien plus rapide est d'utiliser l'intermédiaire de hachage, et c'est environ 50% plus vite.