moyen le plus efficace pour trouver la moyenne en utilisant lodash
J'ai un tableau d'objets, le nombre d'objets est variable
var people = [{
name: john,
job: manager,
salary: 2000
},
{
name: sam,
job: manager,
salary: 6000
},
{
name: frodo,
job: janitor
}];
Ce qui est la façon la plus élégante pour trouver la moyenne des salaires de tous les gestionnaires de l'aide lodash? ( Je suppose que nous devons vérifier si un objet est gestionnaire, ainsi que si l'objet a un salaire de propriété)
Je pensais dans les lignes ci-dessous -
_(people).filter(function(name) {
return name.occupation === "manager" && _(name).has("salary");}).pluck("salary").reduce(function(sum,num) { return sum+num });
Mais je ne suis pas sûr si c'est la bonne approche.
source d'informationauteur meajmal
Vous devez vous connecter pour publier un commentaire.
Pourquoi tous les gens devient de plus compliqué ici?
Que par les docs: https://lodash.com/docs/#meanBy
"efficace" est très ambiguë terme. Dire "efficace", vous pouvez penser à performanceou lisibilitéou concision et ainsi de suite. Je pense que le plus lisible et concis solution est:
Les plus rapide solution est de ne pas utiliser loadash, ni bibliothèque, ni aucune
filter
reduce
méthodes. Utilisationfor
boucle à la place:Je pense que pour le développement côté client lisibilité est plus important que performance dans la plupart des cas , donc je pense que la première variante est plus "efficace".
Je ne sais pas à propos de lowdash, mais peut-être un simple JS solution vous aide à y parvenir:
Cette passe d'un objet à réduire comme le accumulateur qui a trois propriétés: la somme des salaires, le nombre de salaires, et la moyenne de la mesure. Il itère sur tous les objets, en additionnant les salaires, en comptant combien il y en a et le calcul de la moyenne à chaque itération. Finalement, il retourne un objet (le accumulateur) et le moyenne propriété est en lecture.
L'appel d'une seule méthode intégrée devrait être plus rapide (c'est à dire la plus efficace) que l'appel d'4 fonctions natives. "Élégant" est dans l'œil de celui qui regarde. 😉
BTW, il y a des erreurs dans le littéral d'objet, il convient de:
Avec la plus fonctionnelle
lodash
version (lodash-fp
) etes2015
vous pouvez utiliser la flèche fonctions et auto curry pour obtenir un plus souple et fonctionnelle aromatisé solution.Vous pouvez le mettre dans un laid doublure:
Ou vous pouvez créer un ordre DSL:
lodash v3:
_.sum(people, 'salary') /people.length
(people
ne doit pas être vide)lodash v4:
_.meanBy(people, 'salary')
Plus propre (élégant) que je pouvais penser était:
Il prend la somme des éléments et divise son nombre d'éléments, qui est à peu près la définition de la moyenne.
Dommage que si vous voulez faire que de joli une-liner, le code aura moins clair à lire.
À l'aide de lodash/fp et ES2016/ES6, il peut être fait dans une plus fonctionnel
Ce que vous faites est
1. Obtenir tous les objets de "gestionnaire" de type
2. Extrait de 'salaire' propriété/domaine à partir d'eux
3. Trouver moyen en utilisant la moyenne de la fonction
Ici est une version complète du code pour votre commodité qui s'exécute sur nodejs.