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 有重复的值,后面的值会覆盖前面的值。

京公网安备 11010502036488号