J'ai un objet JSON extrêmement grand structuré comme ceci:
{A : 1, B : 2, C : 3, D : 4}
J'ai besoin d'une fonction qui peut permuter les valeurs avec des clés dans mon objet et je ne sais pas comment le faire. J'aurais besoin d'une sortie comme celle-ci:
{1 : A, 2 : B, 3 : C, 4 : D}
Y a-t-il un moyen que je puisse faire cela créerait manuellement un nouvel objet où tout est échangé?
Merci
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Réponses:
Exemple ici FIDDLE n'oubliez pas d'allumer votre console pour voir les résultats.
Versions ES6 :
Ou en utilisant Array.reduce () et Object.keys ()
Ou en utilisant Array.reduce () et Object.entries ()
la source
vous pouvez utiliser la fonction lodash _.invert, il peut également utiliser multivlaue
la source
En utilisant ES6:
la source
Obtenez les clés de l'objet, puis utilisez la fonction de réduction du tableau pour parcourir chaque clé et définir la valeur comme clé et la clé comme valeur.
la source
Dans ES6 / ES2015, vous pouvez combiner l'utilisation d' Object.keys et réduire avec la nouvelle fonction Object.assign , une fonction de flèche et un nom de propriété calculé pour une solution d'instruction unique assez simple.
Si vous transpilez en utilisant l' opérateur de propagation d'objet (étape 3 au moment de l'écriture de ceci), cela simplifiera un peu plus les choses.
Enfin, si vous avez Object.entries disponible (étape 4 au moment de la rédaction), vous pouvez nettoyer un peu plus la logique (IMO).
la source
Maintenant que nous avons Object.fromEntries:
ou
la source
En complément des réponses @joslarson et @jPO:
Sans ES6 nécessaire, vous pouvez utiliser et l' opérateur virgule :
Object.keys
Array.reduce
Certains peuvent trouver cela moche, mais c'est "un peu" plus rapide car le
reduce
ne répartit pas toutes les propriétés duobj
sur chaque boucle.la source
forEach
,map
oureduce
. J'ai fait cette réponse pour avoir une solution one-liner sans avoir besoin d'es6 et être toujours pertinente en termes de rapidité / efficacité.Essayer
Afficher l'extrait de code
la source
Le plus court que j'ai trouvé avec ES6.
la source
Utilisation de Ramda :
la source
Je pense qu'il est préférable de faire cette tâche en utilisant un module npm, comme
invert-kv
.invert-kv : Inverse la clé / valeur d'un objet. Exemple: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
la source
Avec du pur Ramda dans un style pur et sans point:
Ou, avec une version ES6 un peu plus alambiquée, toujours purement fonctionnelle:
la source
la source
object
vient-il?map
est censé faire, vous l'utilisez ici commeforEach
Voici une implémentation fonctionnelle pure du retournement
keys
etvalues
dans ES6:Manuscrit
JavaScript
la source
Cela peut rendre votre objet
{A : 1, B : 2, C : 3, D : 4}
,, semblable à un tableau, vous pouvez donc avoirla source
Voici une option qui permutera les clés avec des valeurs mais ne perdra pas les doublons, si votre objet est: {a: 1, b: 2, c: 2}, il renverra toujours un tableau dans la sortie:
la source