for...in

for...in 以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。实现方法如下:

const user = {
  name: 'IU',
  age: 18,
  gender: '女'
}

const reversed = obj => {
  const res = {}
  for (key in obj) {
    res[obj[key]] = key
  }
  return res
}

console.log(reversed(user)) // {18: "age", IU: "name", 女: "gender"}

Object.entries

使用 Object.entries 将传入的对象转为一个数组,在使用 Array.prototype.reduce 反转对象的键和值。

const reversed = obj => 
  Object.entries(obj).reduce((acc, [k, v]) => ({...acc , [v]: k}),{})

console.log(reversed(user)) // {18: "age", IU: "name", 女: "gender"}

第三方库

如果你正好在使用第三方库,一些方法可能可以帮助到你。

使用第三方库如 Lodash,其中的 _invert(obj) 用于创建一个 obj 键值倒置后的对象。

const object = { 'a': 1, 'b': 2, 'c': 1 }
 
_.invert(object) // { '1': 'c', '2': 'b' }

注意:如果 obj 有重复的值,后面的值会覆盖前面的值。