javascript arrays

Cambiar matriz en javascript en objeto más simple



arrays (4)

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.


Básicamente, debe usar forEach lugar de la función de map y luego puede construir ese objeto a cualquier clave, par de valores que desee mantener.

Pruebe esto, resolverá su problema.

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

Nota: Aquí no estamos usando el map porque queremos devolver el objeto, no una matriz, por lo que podemos usar reduce función de reduce aquí para hacerlo, pero pensé que esto sería simple y fácil de entender lo que queremos y qué estamos haciendo aquí .


Puede usar ES6 Map para eso use Object.fromEntries para convertir el map nuevamente en Object .

Para más información sobre 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);


Puede usar la función de reduce JavaScript para crear un objeto vacío y poner cada clave y valor en él.

const data = [ { ''key'': ''Username'', ''value'': ''Benutzername'', ''group'': ''default'' }, { ''key'': ''Password'', ''value'': ''Passwort'', ''group'': ''default'' } ]; const newData = data.reduce((acc, row) => { acc[row.key] = row.value; return acc; }, {}); console.log(newData);

Editar: Buena sugerencia de Donny Verduijn . Puede usar es6 desestructuración para escribir la función más corta.

const newData = data.reduce((acc, { key, value }) => ({ ...acc, [key]: value }), {});


utilizar con Array#map es crear la clave y el valor como objeto y Object.assign valor de matriz encubierta al objeto

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)