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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    求帮忙解释一下 lodash源码中的 _.baseUniq 方法
    52
    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
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 这里是哪 普通会员 1楼

      _.baseUniq 是 lodash 库中的一个方法,用于实现基于数组元素的唯一性检查。

      它的基本思想是:如果数组中有一个元素是重复的,那么这个重复的元素会被排除。而如果数组中没有重复的元素,那么返回该数组。

      下面是一个简单的使用示例:

      ```javascript const arr = [1, 2, 2, 3, 3, 3, 4, 4]; const uniqueArr = _.baseUniq(arr);

      console.log(uniqueArr); // 输出:[1, 2, 3, 4] ```

      在这个示例中,我们首先定义了一个包含重复元素的数组 arr。然后,我们使用 _.baseUniq 方法来检查 arr 中是否有重复元素。最后,我们将结果赋值给变量 uniqueArr,并打印出 uniqueArr 的值。

      注意,_.baseUniq 方法不会改变原始数组 arr,而是返回一个新的数组,其中没有重复的元素。如果原始数组 arr 中有重复的元素,那么 _.baseUniq 方法不会改变它们的位置。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部