Mam prosty JSON z tablicą, która zawiera dalsze obiekty itp., Takie jak to:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Ale tak naprawdę chcę takiego obiektu:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Chcę więc zredukować tablicę do prostych par klucz-wartość, które znajdują się w tablicy, a nawet w obiekcie (klucze są unikalne). Czy ktoś ma pomysł, jak to zmniejszyć za pomocą niektórych z tych fajnych funkcji tablicowych? Wymyśliłem tylko coś takiego dla każdego i budując własność obiektu „ręcznie” dla własności, ale pamiętam, że było kilka fajnych rzeczy dla tablicy, takich jak „zmniejsz”, operator rozkładania (...), mapa, każdy, niektóre itp.
Próbowałem z czymś takim jak:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Ale dostałem tylko komunikat o błędzie TypeError: Invalid attempt to destructure non-iterable instance
Edycja: Wszystkie trzy odpowiedzi działają idealnie dobrze. Dzięki.
źródło
group
Będą ignorowane?Odpowiedzi:
Zasadniczo musisz użyć
forEach
zamiastmap
funkcji, a następnie możesz zbudować ten obiekt do dowolnej pary klucz-wartość, którą chcesz zachować.Spróbuj tego, rozwiąże Twój problem.
Uwaga: tutaj nie używamy,
map
ponieważ chcemy zwrócić obiekt, a nie tablicę, więc możemy użyćreduce
funkcji, aby to zrobić, ale pomyślałem, że byłoby to proste i łatwe do zrozumienia, czego chcemy i co robimy tutaj.źródło
Możesz użyć
reduce
funkcji javascript, aby utworzyć pusty obiekt i umieścić w nim każdy klucz i wartość.Edycja: Niezła sugestia Donny'ego Verduijna . Możesz użyć restrukturyzacji es6, aby napisać funkcję krótszą.
źródło
(acc, { key, value }) => ({ ...acc, [key]: value })
const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});
użyj z
Array#map
jego kluczem i wartością jako obiektem iObject.assign
ukrytą wartością tablicy do obiektuźródło
Możesz użyć ES6
Map
do tego celu,Object.fromEntries
abymap
ponownie przekonwertowaćObject
.Aby uzyskać więcej informacji o mapie
źródło