# invert

# Description

创建一个 object 键值倒置后的对象。 如果 object 有重复的值,后面的值会覆盖前面的值。

# Params

object

# Return

Object

# Code

const toString = Object.prototype.toString
function invert(object) {
  const result = {}
  Object.keys(object).forEach((key) => {
    let value = object[key]
    if (value != null && typeof value.toString !== 'function') {
      value = toString.call(value)
    }
    result[value] = key
  })
  return result
}

# Analyze

通过 Object.keys 拿到 object 的可遍历属性,使用 forEach 遍历,拿到 value 值

判断 如果 value 不是 null 并且 不存在 toString 方法时,使用 Object.prototype.toString.call 来进行转换

如果 value 存在 toString 方法,则在设置对象 key 值时,会隐式的转换

将 value 作为 属性 ,将 key 作为 值 设置给 result

# Remark

  1. Object.prototype.toString() MDN (opens new window) 方法返回一个表示该对象的字符串。

# Example

const obj = {
  a: +new Date(),
  b: +new Date(),
  c: true,
  d: new Boolean(true),
  e: 1,
  f: '1'
}

console.log(invert(obj)) // { '1': 'f', '1615255265828': 'b', true: 'd' }