Ändern Sie das Array in Javascript in ein einfacheres Objekt




arrays (3)

Ich habe ein einfaches JSON mit einem Array, das weitere Objekte usw. 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 in einem Array oder sogar in einem Objekt 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 Arrays gab, wie "Verkleinern", den Spread-Operator (...), Karte, alle, einige, etc.

Ich habe es mit etwas versucht:

var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)

Aber das brachte mir nur eine Fehlermeldung. TypeError: Invalid attempt to destructure non-iterable instance

Bearbeiten: Alle drei Antworten funktionieren einwandfrei. Vielen Dank.


Grundsätzlich müssen Sie forEach anstelle der map verwenden, und dann können Sie dieses Objekt mit einem beliebigen Schlüssel-Wert-Paar erstellen, das Sie beibehalten möchten.

Versuchen Sie dies, es wird Ihr Problem lösen.

var temp = {};

this.languagePack.forEach(({key,value}) => {
    temp[key] = value
})

console.log(temp)

Hinweis: Hier verwenden wir keine map da wir ein Objekt nicht als Array zurückgeben möchten. Daher können wir hier die reduce verwenden, aber ich dachte, dies wäre einfach und leicht zu verstehen, was wir wollen und was wir hier tun .


Sie können ES6 Map , um mithilfe von Object.fromEntries die map wieder in Object zu konvertieren.

Weitere Informationen zu Map

let languagePack=
[{
  'key': 'Username',
  'value': 'Benutzername',
  'group': 'default'
},
{
  'key': 'Password',
  'value': 'Passwort',
  'group': 'default'
}];

let map = new Map();

languagePack.forEach((val)=>{
  map.set(val.key, val.value);
})
languagePack = Object.fromEntries(map);
console.log(languagePack);


Verwenden Sie mit Array#map um den Schlüssel und den Wert als Objekt zu Object.assign

const languagePack = [ { 'key': 'Username', 'value': 'Benutzername', 'group': 'default' }, { 'key': 'Password', 'value': 'Passwort', 'group': 'default' } ];

var res = Object.assign({},...languagePack.map(({key,value}) => ({[key]:value})))

console.log(res)





arrays