Inversão Rápida de Chaves e Valores em Objetos JavaScript com Object.entries
Inverter as chaves e os valores de um objeto é uma necessidade comum ao transformar dicionários de busca bidirecionais ou reestruturar payloads de APIs. Combinando os métodos nativos Object.entries(), .map() e Object.fromEntries(), é possível realizar essa transposição de forma limpa, funcional e sem mutating no objeto original.
JavaScript
/**
* Inverte as chaves e os valores de um objeto simples.
* @param {Record<string, string|number>} objetoOriginal - Objeto a ser invertido.
* @returns {Record<string, string>} Novo objeto com chaves e valores trocados.
*/
function inverterObjeto(objetoOriginal) {
// 1. Transforma o objeto em um array de pares [chave, valor]
// 2. Inverte cada par para [valor, chave]
// 3. Reconstrói o objeto a partir do novo array de pares
return Object.fromEntries(
Object.entries(objetoOriginal).map(([chave, valor]) => [valor, chave])
);
}
// --- Exemplo Prático de Uso ---
const mapaDeStatus = {
200: 'OK',
404: 'NOT_FOUND',
500: 'INTERNAL_SERVER_ERROR'
};
const statusParaCodigo = inverterObjeto(mapaDeStatus);
console.log('Objeto Original:', mapaDeStatus);
// { '200': 'OK', '404': 'NOT_FOUND', '500': 'INTERNAL_SERVER_ERROR' }
console.log('Objeto Invertido:', statusParaCodigo);
// { OK: '200', NOT_FOUND: '404', INTERNAL_SERVER_ERROR: '500' }
Pontos-chave
- Coerção Transparente para String: Como todas as chaves de objetos em JavaScript são convertidas para strings ou
Symbols, valores numéricos passados como novos índices se tornarão chaves em formato string. - Risco de Sobrescrita (Valores Duplicados): Se o objeto original possuir valores duplicados, as chaves correspondentes aos valores posteriores sobrescreverão as anteriores no resultado final.
- Métodos Nativos Modernos (ES2019+): O uso do
Object.fromEntries()elimina a necessidade de acumuladores manuais comArray.prototype.reduce(), garantindo um código mais legível e idiomático. - Solução Imutável: A função retorna uma nova instância de objeto, mantendo os dados de entrada intactos e prevenindo efeitos colaterais na aplicação.
