Carte de Réduction de l'objet avec un trait de soulignement
Je veux réduire cet objet à un objet contenant le nom du produit et du prix moyen. Quel est le moyen le plus rapide de le faire?
var foo = { group1: [
{
name: "one",
price: 100
},
{
name: "two",
price: 100
}],
group2: [
{
name: "one",
price: 200
},
{
name: "two",
price: 200
}],
group3: [
{
name: "one",
price: 300
},
{
name: "two",
price: 300
}]
}
résultant dans
var foo2 = [{
name: 'one',
price: 200
},{
name: 'two',
price: 200
}];
Merci!
D'où vient
400
venir?OriginalL'auteur vincewilfork | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
Edit: en Laissant pour l'instant, mais j'ai totalement oublié _.aplatir, de sorte redmallard a un beaucoup de de mieux répondre à.
Si vous connaissez déjà les noms de produits et ils apparaissent dans chaque groupe, vous pourriez faire la même chose rapidement de cette façon:
J'ai mis cela ensemble, qui devrait fonctionner même si votre groupes différents produits (par exemple, "un" dans les première, deuxième, et quatrième groupe, et "deux" dans le premier et le troisième):
Vous pouvait encore le faire ci-dessus dans une fonction avec un compteur et en additionnant le prix, mais de cette façon, vous avez aussi le prix dans le cas où vous voulez, dire, prendre la déviation standard ou trouver le mode.
Mon plaisir. Merci pour ma première accepté de répondre!
OriginalL'auteur Evan
Pas à la pluie sur Evan parade, mais voici une autre qui est un peu plus court 😉
Le voir en action: http://plnkr.co/edit/lcmZoLkrlfoV8CGN4Pun?p=preview
.groupBy(function(valeur) { return valeur.nom; }) peut être écrit simplement .groupBy('nom').
OriginalL'auteur redmallard
J'aime vraiment redmallard de la solution, mais je voulais le golf un peu.
Trait de soulignement ne comprend pas un
sum
fonction, mais nous pouvons écrire assez élégante expressions fonctionnelles par l'ajout d'unsum
mixin. Cette fonction est appelée ajouter dans le trait de soulignement-contribs repo.Alors on peut écrire:
http://plnkr.co/edit/ul3odB7lr8qwgVIDOtM9
Mais ensuite, nous pouvons également créer une
avg
mixin pour développer notre toolbelt:OriginalL'auteur user239558