Skip to content

Latest commit

 

History

History
39 lines (26 loc) · 1.62 KB

invert.md

File metadata and controls

39 lines (26 loc) · 1.62 KB

lodash源码分析之invert

本文为读 lodash 源码的第二百九十二篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

源码分析

invert 的作用是将对象 object 的值作为属性,将属性作为值来得到一个新的对象。如果值有重复,则会根据迭代的顺序,后面的属性会覆盖前面的。

源码如下:

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
}

使用 Object.keys 获取 object 上所有的可枚举属性,使用 forEach 遍历属性,在遍历的过程中获取对应的值 value

因为对象的属性需要为 string 类型,在直接设置对象的属性时,会隐式调用 valuetoString 方法转换成字符串。

因此需要检测 value 上有没有 toString 这个方法,如果没有,则借用 Object.prototype.toString 来转换。

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面