javascript - parse - Cambiar clave con valor JSON
mostrar datos json javascript (7)
Como complemento de @joslarson y @jPO responde:
Sin ES6 necesario, puede utilizar Object.keys
reduce y el operador de coma :
Object.keys(foo).reduce((obj, key) => (obj[foo[key]] = key, obj), {});
Algunos pueden encontrarlo feo, pero es "un poco" más rápido ya que el reduce
no extiende todas las propiedades del obj
en cada ciclo.
Tengo un objeto JSON extremadamente grande estructurado de esta manera:
{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 manera de que pueda hacer esto crearía manualmente un nuevo objeto en el que todo se intercambia?
Gracias
En ES6 / ES2015 puede combinar el uso de Object.keys y reduce con la nueva función Object.assign , una función de flecha y un nombre de propiedad calculado para una solución de instrucción única bastante sencilla.
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.keys(foo)
.reduce((obj, key) => Object.assign({}, obj, { [foo[key]]: key }), {});
Si está transfiriendo utilizando el operador de propagación de objetos (etapa 3 al momento de escribir esto) eso simplificará las cosas un poco más.
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.keys(foo)
.reduce((obj, key) => ({ ...obj, [foo[key]]: key }), {});
Finalmente, si tiene Object.entries disponibles (etapa 4 desde el momento de la escritura), puede limpiar la lógica un toque más (IMO).
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.entries(foo)
.reduce((obj, [key, value]) => ({ ...obj, [value]: key }), {});
Obtenga las claves del objeto, y luego use la función de reducción de la matriz para ir a través de cada tecla y establecer el valor como la clave, y la clave como el valor.
var data = {A : 1, B : 2, C : 3, D : 4}
var newData = Object.keys(data).reduce(function(obj,key){
obj[ data[key] ] = key;
return obj;
},{});
console.log(newData);
Usando Ramda :
const swapKeysWithValues =
R.pipe(
R.keys,
R.reduce((obj, k) => R.assoc(source[k], k, obj), {})
);
const result = swapKeysWithValues(source);
Usando ES6:
const obj = { a: "aaa", b: "bbb", c: "ccc", d: "ddd" };
Object.assign({}, ...Object.entries(obj).map(([a,b]) => ({ [b]: a })))
puede usar la función lodash _.invertir también puede usar multivlaue
var object = { ''a'': 1, ''b'': 2, ''c'': 1 };
_.invert(object);
// => { ''1'': ''c'', ''2'': ''b'' }
// with `multiValue`
_.invert(object, true);
// => { ''1'': [''a'', ''c''], ''2'': [''b''] }
function swap(json){
var ret = {};
for(var key in json){
ret[json[key]] = key;
}
return ret;
}
Ejemplo aquí FIDDLE no te olvides de encender tu consola para ver los resultados.