Eu tenho um objeto JSON extremamente grande estruturado assim:
{A : 1, B : 2, C : 3, D : 4}
Preciso de uma função que possa trocar os valores com as chaves do meu objeto e não sei como fazer isso. Eu precisaria de uma saída como esta:
{1 : A, 2 : B, 3 : C, 4 : D}
Existe alguma maneira de fazer isso criar manualmente um novo objeto onde tudo é trocado?
obrigado
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Respostas:
Exemplo aqui FIDDLE não se esqueça de ligar seu console para ver os resultados.
Versões ES6 :
Ou usando Array.reduce () & Object.keys ()
Ou usando Array.reduce () & Object.entries ()
fonte
você pode usar a função Lodash _.invert, ela também pode usar multivlaue
fonte
Usando ES6:
fonte
Obtenha as chaves do objeto e use a função de redução do Array para percorrer cada chave e definir o valor como a chave e a chave como o valor.
fonte
No ES6 / ES2015, você pode combinar o uso de Object.keys e reduzir com a nova função Object.assign , uma função de seta e um nome de propriedade computado para uma solução de instrução única bastante direta.
Se você estiver transpilando usando o operador de propagação de objeto (estágio 3 no momento da redação), isso simplificará um pouco mais as coisas.
Finalmente, se você tiver Object.entries disponível (estágio 4 no momento da escrita), você pode limpar a lógica um pouco mais (IMO).
fonte
Agora que temos Object.fromEntries:
ou
fonte
Como um complemento das respostas @joslarson e @jPO:
Sem a necessidade de ES6, você pode usar e o Operador de vírgula :
Object.keys
Array.reduce
Alguns podem achar feio, mas é "meio" mais rápido, pois o
reduce
não espalha todas as propriedades deobj
em cada loop.fonte
forEach
,map
oureduce
. Fiz essa resposta para ter uma solução one-liner sem a necessidade de es6 e ainda ser relevante em termos de velocidade / eficácia.Experimentar
Exibir trecho de código
fonte
O mais curto que criei usando ES6 ..
fonte
Usando Ramda :
fonte
Acredito que seja melhor fazer essa tarefa usando um módulo npm, como
invert-kv
.invert-kv : Inverte a chave / valor de um objeto. Exemplo: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
fonte
Com Ramda pura em um estilo puro e sem pontos:
Ou, com uma versão ES6 um pouco mais complicada, ainda puramente funcional:
fonte
fonte
object
?map
deveria fazer, você está usando aqui comoforEach
Aqui está uma implementação funcional pura de inversão
keys
evalues
em ES6:TypeScript
JavaScript
fonte
Isso pode tornar seu objeto,
{A : 1, B : 2, C : 3, D : 4}
semelhante a um array, para que você possa terfonte
Aqui está uma opção que irá trocar chaves com valores, mas não perder duplicatas, se seu objeto for: {a: 1, b: 2, c: 2}, ele sempre retornará um array na saída:
fonte