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)