Underscore.js convertit l'objet array

Je suis relativement nouveau à underscore.js et j'ai un objet en provenance d'un service REST qui ressemble à ceci (j'ai tapé à la main, et il a attribué à une var ici):

var production = [
    {key: ["wind", "1"], value: 5},
    {key: ["wind", "2"], value: 9},
    {key: ["wind", "3"], value: 11},
    {key: ["wind", "4"], value: 7},
    {key: ["solar", "1"], value: 1},
    {key: ["solar", "2"], value: 1},
    {key: ["solar", "3"], value: 2},
    {key: ["solar", "4"], value: 3},
    {key: ["oil", "1"], value: 15},
    {key: ["oil", "2"], value: 16},
    {key: ["oil", "3"], value: 22},
    {key: ["oil", "4"], value: 23},
];

Puis plus bas, j'ai un code qui analyse cet objet et crée des tableaux pour les éléments comme suit:

var orderedProduction = _.chain(production)
      .groupBy(function (entity) {
            return entity.key[0];
      })
      .map(function (values) { 
            return _.map(values, function (entity2) {
                  return entity2.value;
            });
      })
      .value();

Cela donne les résultats suivants:

orderedProduction  = [
  [5, 9, 11, 7],
  [1, 1, 2, 3],
  [15, 16, 22, 23]
]

Qui perd les clés (éolien/solaire/huile). Et est utilisé pour tracer un graphique. Je suis plus en mesure de vérifier si certains de ces tableaux répondre à un certain seuil comme suit:

var threshold = _.map(orderedProduction  , function(arr) {
    return _.max(arr) > 10;
});

Mes besoins ont changé et j'ai maintenant besoin de filtrer ces tableaux par sa somme totale, tout en conservant la clé.

Ce que je voudrais terminer avec un objet de la sorte:

orderedProduction  = {
      "wind": [5, 9, 11, 7],
      "solar": [1, 1, 2, 3],
      "oil": [15, 16, 22, 23]
    }

Ce serait formidable si le correctif inclus un moyen d'additionner les valeurs de la matrice et de supprimer ceux qui ne sont pas au total jusqu'à un certain montant. (c'est à dire exclure solaire, si ce n'est pas ajouter jusqu'à 10).

Ici est un jsfiddle j'ai créé pour tester tout cela sur: http://jsfiddle.net/2mfjw3jk/


Mise à JOUR:
La solution que j'ai réglé pour:

var orderedProduction = _.chain(production)
    .groupBy(function (entity) {
        return entity.key[0];
    })
    .map(function (vals, key) {
        return [key, _.pluck(vals, 'value')]
    })
    .filter(function(arr) {
        var sum = 0;
        _.each(arr[1], function(num){
            sum += num;
        })
        return sum > 10;
    })
    .object()
    .value();

Il filtre également les valeurs par un seuil prédéterminé (10 dans ce cas).

OriginalL'auteur Husman | 2014-09-16