В ES6 / ES2015 вы можете комбинировать использование Object.keys и уменьшить с новой функцией Object.assign, функцией стрелки и вычисляемым именем свойства для довольно простого решения с одним оператором.
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.keys(foo)
.reduce((obj, key) => Object.assign({}, obj, { [foo[key]]: key }), {});
Если вы транспилируете с помощью оператора распространения объекта (этап 3 на момент написания этого текста), это еще больше упростит ситуацию.
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.keys(foo)
.reduce((obj, key) => ({ ...obj, [foo[key]]: key }), {});
Наконец, если у вас есть Object.entries (этап 4 на момент написания), вы можете немного очистить логику (IMO).
const foo = { a: 1, b: 2, c: 3 };
const bar = Object.entries(foo)
.reduce((obj, [key, value]) => ({ ...obj, [value]: key }), {});