# 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' }