账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    求帮忙解释一下 lodash源码中的 _.baseUniq 方法
    • 纯天然无毒无添加防腐剂2019-02-26 00:00
    44
    0

    好奇心促使下看了 lodash 的数组去重方法 _.uniq 的源码,它又指向了_.baseUniq,源码如下:

    function baseUniq(array, iteratee, comparator) {
      let index = -1
      let includes = arrayIncludes
      let isCommon = true
    
      const { length } = array
      const result = []
      let seen = result
    
      if (comparator) {
        isCommon = false
        includes = arrayIncludesWith
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        const set = iteratee ? null : createSet(array)
        if (set) {
          return setToArray(set)
        }
        isCommon = false
        includes = cacheHas
        seen = new SetCache
      }
      else {
        seen = iteratee ? [] : result
      }
      outer:
      while (++index < length) {
        let value = array[index]
        const computed = iteratee ? iteratee(value) : value
    
        value = (comparator || value !== 0) ? value : 0
        if (isCommon && computed === computed) {
          let seenIndex = seen.length
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer
            }
          }
          if (iteratee) {
            seen.push(computed)
          }
          result.push(value)
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed)
          }
          result.push(value)
        }
      }
      return result
    }

    里面的干扰项略多,感觉被绕晕了,求大神帮忙出个缩略版的,并解释一下思路。

    baseUniq 的源码地址:链接描述

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部