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ď č. 1V 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.