/ / Vytvorte dve polia zo zbierky vlastností objektov a hodnôt pomocou lodného lekcie - javascript, polia, javascript-objects, lodash

Vytvorte dve polia z kolekcie vlastností objektu a hodnôt pomocou lodash - javascript, arrays, javascript-objects, lodash

Mám pole, ktoré obsahuje takéto objekty:

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

Chcem to zmeniť na dve polia, pričom indexy sa zhodujú na základe týchto hodnôt, ako napríklad:

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

Môžem to opakovať a získať kľúče a hodnoty objektu, ale mám pocit, že musí byť v lóži úhľadná cesta, o ktorej neviem. Nejaké návrhy? Ďakujem!

odpovede:

1 pre odpoveď č. 1

V prípade riešenia, ktoré nie je možné získať:

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

Pokiaľ ide o opačný problém (viac polí do jedného súboru objektov), ​​pozri Zlúčiť dve polia do súboru objektov s hodnotami vlastností


3 pre odpoveď č. 2

Zdá sa, že stačí zmapovať objekt a zavolať kľúča () a hodnoty ()

Získate prvé pole ako:

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

výnos ["a","b","c","d"]

A druhé pole ako:

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

výnos ["1","blah","what","3"]


0 pre odpoveď č. 3

Za predpokladu, že tvar objektu je vždy {"label": value}, potom môžete použiť tento vanilkový JavaScript:

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

Na základe vašich komentárov sa zdá byť vaša dátová štruktúra neoptimálna. Odporučil by som alternatívnu štruktúru:

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

Čo je potom triviálne, aby ste štítky a hodnoty vybrali v samostatných kusoch v normálnom JavaScripte:

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

Alebo ak naozaj chcete použiť lodash:

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

Dúfajme, že vidíte, že táto revidovaná štruktúra výrazne zjednodušuje JavaScript, či už používate lodash alebo nie.