/ / Créez deux tableaux à partir d'une collection de propriétés d'objet et de valeurs avec lodash - javascript, tableaux, objets javascript, lodash

Créez deux tableaux à partir d'une collection de propriétés d'objet et de valeurs avec lodash - javascript, arrays, javascript-objects, lodash

J'ai un tableau qui contient des objets, comme ceci:

[{
"first" : 1
},
{
"second" : 2
},
{
"third" : 3
}]

Je souhaite transformer ceci en deux tableaux, avec des index correspondants en fonction de ces valeurs, telles que:

["first","second","third"]
[1,2,3]

Je peux parcourir cela et obtenir les clés et les valeurs de l’objet, mais j’ai le sentiment qu’il doit exister un moyen astucieux de faire cela, ce que je ne connais pas. Aucune suggestion? Je vous remercie!

Réponses:

1 pour la réponse № 1

Pour une solution non lodash:

var arr = [{"first" : 1},{"second" : 2},{"third" : 3}];
var keys = arr.map(function(el){return Object.keys(el)[0];});
var vals = arr.map(function(el){return el[Object.keys(el)[0]];});

Pour le problème opposé (plusieurs tableaux dans un tableau d’objets), voir Fusionner deux tableaux en un tableau d'objets avec des valeurs de propriété


3 pour la réponse № 2

Il semble que vous ayez juste besoin de mapper sur l'objet et d'appeler clés() et valeurs()

Vous obtiendrez le premier tableau comme:

var items = [{a: "1"},{b: "blah",c: "what"},{d: "3"}]
keys = _(items).map(_.keys).flatten().value()

résultats ["a","b","c","d"]

Et le second tableau comme:

values = _(items).map(_.values).flatten().value()

résultats ["1","blah","what","3"]


0 pour la réponse № 3

En supposant que la forme de votre objet soit toujours {"label": value}, alors vous pouvez utiliser ce JavaScript vanille:

var data = [{"first" : 1},{"second" : 2},{"third" : 3}];
var labels = data.map(function(entry) {
return Object.keys(entry)[0];
});
var values = data.map(function(entry) {
return entry[Object.keys(entry)[0]];
});

Votre structure de données semble sous-optimale en fonction de vos commentaires. Je recommanderais une structure alternative:

var data = [
{"label": "first", "value": 1},
{"label": "second", "value": 2},
{"label": "third", "value": 3}
]

Ce qui est alors trivial pour choisir les étiquettes et les valeurs dans des morceaux séparés en JavaScript normal:

var labels = data.map(function(entry) {
return entry.label;
});
var values = data.map(function(entry) {
return entry.value;
});

Ou si vous voulez vraiment utiliser lodash:

var labels = _.pluck(data, "label");
var values = _.pluck(data, "value");

Espérons que vous puissiez constater que cette structure révisée simplifie le JavaScript beaucoup plus facilement, que vous utilisiez lodash ou non.