Ich habe einen einfachen JSON mit einem Array, das weitere Objekte usw. wie folgt enthält:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Aber was ich wirklich will, ist ein Objekt wie dieses:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Daher möchte ich das Array auf einfache Schlüssel-Wert-Paare reduzieren, die sich innerhalb eines Arrays oder sogar eines Objekts befinden (Schlüssel sind eindeutig). Hat jemand eine Idee, wie man dies mit einigen dieser coolen Array-Funktionen reduzieren kann? Ich habe mir nur so etwas wie ein für jedes ausgedacht und das Objekt "von Hand" Eigenschaft für Eigenschaft erstellt, aber ich erinnere mich, dass es einige coole Dinge für das Array gab, wie "Reduzieren", den Spread-Operator (...), Karte, alle, einige usw.
Ich habe es mit so etwas versucht:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Aber das hat mir nur eine Fehlermeldung gebracht TypeError: Invalid attempt to destructure non-iterable instance
Bearbeiten: Alle drei Antworten funktionieren einwandfrei. Vielen Dank.
quelle
group
soll ignoriert werden?Antworten:
Grundsätzlich müssen Sie
forEach
anstelle dermap
Funktion verwenden, und dann können Sie dieses Objekt für jedes Schlüssel- und Wertepaar erstellen, das Sie behalten möchten.Versuchen Sie dies, es wird Ihr Problem lösen.
Hinweis: Hier verwenden wir kein
map
Objekt , da wir kein Array zurückgeben möchten. Daher können wirreduce
hier die Funktion verwenden, aber ich dachte, dies wäre einfach und leicht zu verstehen, was wir wollen und was wir hier tun.quelle
Mit der Javascript-
reduce
Funktion können Sie ein leeres Objekt erstellen und jeden Schlüssel und Wert darin einfügen.Edit: Netter Vorschlag von Donny Verduijn . Sie können die es6-Destrukturierung verwenden, um die Funktion kürzer zu schreiben.
quelle
(acc, { key, value }) => ({ ...acc, [key]: value })
const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});
Verwenden Sie mit
Array#map
seiner Funktion den Schlüssel und den Wert als Objekt und denObject.assign
verdeckten Array-Wert für das Objektquelle
Sie können ES6
Map
für diese Verwendung verwendenObject.fromEntries
, ummap
zurück zu konvertierenObject
.Weitere Informationen zu Map
quelle