Je veux réduire cet objet à un objet contenant le nom du produit et le prix moyen. Quel est le moyen le plus rapide de le faire?
var foo2 = [{ name: 'one', price: 200 },{ name: 'two', price: 200 }];
3 Réponses :
Ne pas pleuvoir sur le défilé d'Evan, mais voici une alternative qui est un peu plus courte;) le voir en action: http://plnkr.co/edit/lcmzolkrlfov8cgn4pun?p=preview p> p> p>
.groupby (fonction (valeur) {retour value.name;}) peut être écrit simplement comme .groupby ("nom").
J'aime vraiment la solution de Redmallard, mais je voulais un peu de golf un peu.
Underscore n'inclut pas une fonction http: // plnkr .CO / EDIT / UL3ODB7LR8QWGVIDOTM9 P> Mais nous pouvons également créer un Somme code>, mais nous pouvons écrire des expressions fonctionnelles assez élégantes en ajoutant un
somme code> mixin. Cette fonction est connue sous le nom de Ajoutez dans le soussecore-contribu. P> Ensuite, nous pouvons écrire: p>
AVG code> Mixin pour développer notre ceinture: P>
// Somewhere in the initialization of the program
_.mixin({
sum : function (arr) {
return _.reduce(arr, function (s, x) { return s + x;}, 0);
},
avg : function (arr) {
return _.sum(arr)/arr.length;
}
});
result = _.chain(original)
.flatten()
.groupBy('name') // shorthand notation
.map(function (value, key) {
return { name: key, price: _.avg(value)};
})
.value();
D'où vient
400 code>?