web-dev-qa-db-fra.com

Underscore.js - Tableau de correspondance des paires clé / valeur en un objet - Une ligne

Je suis passé par nderscore docs mais je n'arrive pas à trouver une méthode (ou un appel à une méthode imbriquée) pour effectuer la transformation suivante:

Disons que j'ai le tableau Javascript suivant:

 [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}, ... ]

Et j'ai besoin de le transformer en l'objet suivant:

 {
      sEcho: 1,
      iColumns: 12,
      ...
 }

J'utilise underscore.js pour une raison donc il doit être une ligne.

46
parliament

Puisque personne n'a posté cette réponse, je la poste parce que je pense que c'est mieux que réponse de Jan . Il est plus court et plus propre sans la fonction inline.

_.object(_.pluck(data, 'name'), _.pluck(data, 'value'));
52
Brad Pitcher

Variation sur réponse de Sza , en utilisant la signature "array of pairs" de _.object:

_.object(_.map(data, function(x){return [x.name, x.value]}))
58
John Dvorak

Cela devrait le faire:

_.reduce(array, function(o, v){
    o[v.name] = v.value;
    return o;
}, {});

En one-liner (vous vous moquez de moi, non?):

_.reduce(array,function(a,b){a[b.name]=b.value;return a},{});
27
Esailija

Disons que vous avez le tableau JavaScript suivant:

var list = [
    {
         name: "sEcho",
         value: 1
    },
    {
         name: "iColumns",
         value: 12
    },
    ...
];

Vous pouvez le convertir au format souhaité comme suit:

var table = _.reduce(list, function (table, item) {
    table[item.name] = item.value;
    return table;
}, {});

Ce n'est pas une ligne, mais je ne pense pas que vous vouliez dire littéralement une ligne. As tu?

Voici un one-liner si vous voulez vraiment dire un one-liner:

var t = _.reduce(list, function (t, i) { return t[i.name] = i.value, t; }, {});

Oui, d'autres ont fourni la même réponse. Cependant, c'est uniquement parce que la réponse à votre question est si simple.

6
Aadit M Shah
var names = _.pluck(data, 'name');
var values = _.pluck(data, 'value');
var result = _.object(_.Zip(names, values));
console.log(result);
6
zs2020
var a =  [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12} ];

var o = {}; _.each(a, function(e) { o[e.name] = e.value; });

console.log(o);
// Object {sEcho: 1, iColumns: 12} 
3
Amadan

endroit idéal pour utiliser réduire je pense:

_.reduce(ary, function(memo, obj){ memo[obj["name"]] = obj["value"]; return memo }, {});

2
user2240431
var arr = [{ "name" : "sEcho", "value" : 1},{ "name" : "iColumns", "value" : 12}]

ES6

_.mapObject( _.indexBy(arr, 'name'), (v) => v.value )

ES5

_.mapObject( _.indexBy(arr, 'name'), function (v) { return v.value; } )

Cela se répète deux fois

0
bentael