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
将传入的对象转为一个数组,在使用 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
有重复的值,后面的值会覆盖前面的值。