9
votes

Carte réduisant l'objet avec un soulignement

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
            }];


1 commentaires

D'où vient 400 ?


3 Réponses :



21
votes

Ne pas pleuvoir sur le défilé d'Evan, mais voici une alternative qui est un peu plus courte;) xxx

le voir en action: http://plnkr.co/edit/lcmzolkrlfov8cgn4pun?p=preview


1 commentaires

.groupby (fonction (valeur) {retour value.name;}) peut être écrit simplement comme .groupby ("nom").



5
votes

J'aime vraiment la solution de Redmallard, mais je voulais un peu de golf un peu.

Underscore n'inclut pas une fonction 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> xxx pré>

http: // plnkr .CO / EDIT / UL3ODB7LR8QWGVIDOTM9 P>

Mais nous pouvons également créer un 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();


0 commentaires