Eu tenho um JSON simples com uma matriz que contém outros objetos, etc. como este:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Mas o que eu realmente quero é um objeto como este:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Então, quero reduzir a matriz para pares simples de valor-chave que estão dentro de uma matriz ou mesmo de um objeto (as chaves são únicas). Alguém tem uma idéia de como reduzir isso com algumas dessas funções de matriz legal? Eu só criei algo como um para cada um e construí o objeto "à mão" propriedade para propriedade, mas lembro que havia algumas coisas legais para matriz como 'reduzir', o operador de propagação (...), mapa, todos, alguns etc.
Eu tentei com algo como:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Mas isso só me deu uma mensagem de erro TypeError: Invalid attempt to destructure non-iterable instance
Edit: Todas as três respostas estão funcionando perfeitamente. Obrigado.
fonte
group
deve ser ignorado?Respostas:
Basicamente, você precisa usar em
forEach
vez damap
função e, em seguida, criar esse objeto com qualquer par de chaves e valores que deseja manter.Tente isso, ele resolverá o seu problema.
Nota: Aqui não estamos usando
map
porque queremos retornar um objeto e não uma matriz, portanto, podemos usar areduce
função aqui para fazê-lo, mas achei que seria simples e fácil entender o que queremos e o que estamos fazendo aqui.fonte
Você pode usar a
reduce
função javascript para criar um objeto vazio e colocar cada chave e valor nele.Edit: Nice sugerir Donny Verduijn . Você pode usar es6 destructuring para escrever a função mais curta.
fonte
(acc, { key, value }) => ({ ...acc, [key]: value })
const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});
use com
Array#map
ele criar a chave e o valor como objeto e oObject.assign
valor da matriz secreta para o objetofonte
Você pode usar o ES6
Map
para esse usoObject.fromEntries
para convertermap
novamente emObject
.Para mais informações sobre o Mapa
fonte