Tengo un objeto JSON extremadamente grande estructurado así:
{A : 1, B : 2, C : 3, D : 4}
Necesito una función que pueda intercambiar los valores con claves en mi objeto y no sé cómo hacerlo. Necesitaría una salida como esta:
{1 : A, 2 : B, 3 : C, 4 : D}
¿Hay alguna forma de que pueda hacer esto? ¿Crearía manualmente un nuevo objeto donde todo se intercambia?
Gracias
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Respuestas:
Ejemplo aquí FIDDLE no olvide encender su consola para ver los resultados.
Versiones ES6 :
O usando Array.reduce () y Object.keys ()
O usando Array.reduce () y Object.entries ()
fuente
puede usar la función lodash _.invertir también puede usar multivlaue
fuente
Usando ES6:
fuente
Obtenga las claves del objeto y luego use la función de reducción de Array para revisar cada clave y establecer el valor como clave y la clave como valor.
fuente
En ES6 / ES2015 puede combinar el uso de Object.keys y reducir con la nueva función Object.assign , una función de flecha y un nombre de propiedad calculado para una solución de declaración única bastante sencilla.
Si está transpilando usando el operador de extensión de objetos (etapa 3 al momento de escribir esto), eso simplificará las cosas un poco más.
Finalmente, si tiene Object.entries disponibles (etapa 4 a partir de la escritura), puede limpiar la lógica un poco más (IMO).
fuente
Ahora que tenemos Object.fromEntries:
o
fuente
Como complemento de las respuestas de @joslarson y @jPO:
Sin necesidad de ES6, puede usar y el operador de coma :
Object.keys
Array.reduce
Algunos pueden encontrarlo feo, pero es "un poco" más rápido ya
reduce
que no distribuye todas las propiedades deobj
en cada bucle.fuente
forEach
,map
oreduce
. Hice esta respuesta para tener una solución de una sola línea sin la necesidad de es6 y seguir siendo relevante en términos de velocidad / efectividad.Tratar
Mostrar fragmento de código
fuente
El más corto que se me ocurrió usando ES6 ..
fuente
Usando Ramda :
fuente
Creo que es mejor hacer esta tarea usando un módulo npm, como
invert-kv
.invert-kv : invierte la clave / valor de un objeto. Ejemplo: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
fuente
Con Ramda puro en un estilo puro y sin puntos:
O, con una versión ES6 un poco más complicada, todavía puramente funcional:
fuente
fuente
object
viene estomap
se supone que debe hacer, lo estás usando aquí comoforEach
Aquí hay una implementación funcional pura de voltear
keys
yvalues
en ES6:Mecanografiado
JavaScript
fuente
Esto puede hacer que su objeto,
{A : 1, B : 2, C : 3, D : 4}
parezca una matriz, por lo que puede tenerfuente
Aquí hay una opción que intercambiará claves con valores pero no perderá duplicados, si su objeto es: {a: 1, b: 2, c: 2}, siempre devolverá una matriz en la salida:
fuente