J'ai un JSON simple avec un tableau qui contient d'autres objets, etc. comme ceci:
languagePack:
[
{
'key': 'Username',
'value': 'Benutzername',
'group': 'default'
},
{
'key': 'Password',
'value': 'Passwort',
'group': 'default'
}
]
Mais ce que je veux vraiment, c'est un objet comme celui-ci:
languagePack:
{
'Username': 'Benutzername',
'Password': 'Passwort'
}
Donc, je veux réduire le tableau à de simples paires clé-valeur qui se trouvent à l'intérieur d'un tableau ou même d'un objet (les clés sont uniques). Quelqu'un a-t-il une idée de la façon de réduire cela avec certaines de ces fonctions de tableau cool? Je n'ai trouvé que quelque chose comme un pour chacun et j'ai construit l'objet "à la main" pour la propriété, mais je me souviens qu'il y avait des choses sympas pour le tableau comme 'réduire', l'opérateur de propagation (...), la carte, tout, certains, etc.
Je l'ai essayé avec quelque chose comme:
var temp = this.languagePack.map(([key, value]) => ({key,value}))
console.log(temp)
Mais cela ne m'a fait qu'un message d'erreur TypeError: Invalid attempt to destructure non-iterable instance
Edit: Les trois réponses fonctionnent parfaitement bien. Merci.
la source
group
doit être ignoré?Réponses:
Fondamentalement, vous devez utiliser
forEach
au lieu demap
fonction, puis vous pouvez créer cet objet à n'importe quelle paire de clés et de valeurs que vous souhaitez conserver.Essayez ceci, cela résoudra votre problème.
Remarque: Ici, nous n'utilisons pas
map
parce que nous voulons renvoyer un objet et non un tableau, nous pouvons donc utiliser lareduce
fonction ici pour le faire, mais j'ai pensé que ce serait simple et facile de comprendre ce que nous voulons et ce que nous faisons ici.la source
Vous pouvez utiliser la
reduce
fonction javascript pour créer un objet vide et y mettre chaque clé et valeur.Edit: Belle suggestion de Donny Verduijn . Vous pouvez utiliser la déstructuration es6 pour écrire la fonction plus court.
la source
(acc, { key, value }) => ({ ...acc, [key]: value })
const newData = data.reduce((acc, row) => (acc[row.key] = row.value, acc), {});
utiliser avec
Array#map
son créer la clé et la valeur en tant qu'objet et laObject.assign
valeur de tableau caché à l'objetla source
Vous pouvez utiliser ES6
Map
pour cette utilisationObject.fromEntries
pour convertirmap
revenir àObject
.Pour plus d'informations sur la carte
la source