Tengo un JSON simple con una matriz que contiene más objetos, etc. como este:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Pero lo que realmente quiero es un objeto como este:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Entonces, quiero reducir la matriz a simples pares clave-valor que están dentro de una matriz o incluso un objeto (las claves son únicas). ¿Alguien tiene una idea de cómo reducir esto con algunas de estas geniales funciones de matriz? Solo se me ocurrió algo así como un para cada uno y construir la propiedad del objeto "a mano" para la propiedad, pero recuerdo que había algunas cosas interesantes para la matriz como 'reducir', el operador de propagación (...), el mapa, cada, algunos, etc.
Lo probé con algo como:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Pero eso solo me dio un mensaje de error TypeError: Invalid attempt to destructure non-iterable instance
Editar: Las tres respuestas funcionan perfectamente bien. Gracias.
fuente

groupserá ignorado?Respuestas:
Básicamente, debe usar en
forEachlugar de lamapfunción y luego puede construir ese objeto a cualquier clave, par de valores que desee mantener.Pruebe esto, resolverá su problema.
Nota: Aquí no estamos usando
mapporque queremos devolver un objeto, no una matriz, por lo que podemos usar lareducefunción aquí para hacerlo, pero pensé que esto sería simple y fácil de entender lo que queremos y qué estamos haciendo aquí.fuente
Puede usar la
reducefunción de JavaScript para crear un objeto vacío y poner cada clave y valor en él.Editar: Buena sugerencia de Donny Verduijn . Puede usar es6 desestructuración para escribir la función más corta.
fuente
(acc, { key, value }) => ({ ...acc, [key]: value })const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});utilizar con
Array#mapsu crear la clave y el valor como objeto y elObject.assignvalor de matriz encubierta para objetarfuente
Puede usar ES6
Mappara ese usoObject.fromEntriesparamapvolver a convertirObject.Para más información sobre Mapa
fuente