Lodash源码分析-union,unionBy,unionWith

lodash源码研读之union,unionBy,unionWith

一、源码地址

二、结构分析

union,unionBy,unionWith使用到了baseRest、baseUniq、baseFlatten模块,结构框图如下。

  • baseRest 模块用于处理可变参数。它接受一个函数作为参数,并返回一个新的函数,该新函数能够接受任意数量的参数,并将这些参数作为数组传递给原函数。
  • baseFlatten 模块用于扁平化数组。它将嵌套的数组结构展平到指定的深度。
  • baseUniq 模块用于从数组中去除重复的元素。它接受一个数组作为参数,并返回去重后的新数组。

三、函数介绍

下面依次介绍各个函数。

1.union函数

javascript 复制代码
      var union = baseRest(function(arrays) {
            return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
        });
//例子
var result = union([1, 2, 3], [2, 3, 4], [4, 5, 6]);
// result 将是 [1, 2, 3, 4, 5, 6]

union 函数的作用是创建一个包含所有给定数组元素的全新数组,同时去除重复的元素。即并集。

2.unionBy函数

javascript 复制代码
var unionBy = baseRest(function(arrays) {
            var iteratee = last(arrays);
            if (isArrayLikeObject(iteratee)) {
                iteratee = undefined;
            }
            return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
        });
//例子
var result = unionBy([1.1, 2.2, 3.3], [2.4, 3.5, 4.6], Math.floor);
// result 将是 [1.1, 2.2, 3.3, 4.6]

unionBy 函数的作用是创建一个包含所有给定数组元素的全新数组,同时去除重复的元素。与 union 函数不同的是,unionBy 允许你通过一个迭代器函数来定义如何判断元素是否重复。

3.unionWith函数

javascript 复制代码
var unionWith = baseRest(function(arrays) {
            var comparator = last(arrays);
            comparator = typeof comparator == 'function' ? comparator : undefined;
            return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
        });

unionWith 函数的作用是创建一个包含所有给定数组元素的全新数组,同时去除重复的元素。与 union 和 unionBy 不同的是,unionWith 允许你通过一个比较器函数(comparator)来定义如何判断元素是否重复。

四、总结

union,unionBy,unionWith函数,是用来求多个数组的并集。其中unionBy可以接收迭代器,unionWith可以接收比较器。

相关推荐
蔚一13 分钟前
运行npm install 时,卡在sill idealTree buildDeps没有反应
前端·spring boot·后端·npm·node.js·vue
喜欢踢足球的老罗1 小时前
搭建一个本地轻量级且好用的学习TypeScript语言的环境
javascript·学习·typescript
豆豆(设计前端)1 小时前
总结 Vue 请求接口的各种类型及传参方式
前端·javascript·vue.js
BestArsenaI1 小时前
vue -关于浏览器localstorge数据定期清除的实现
javascript·vue.js·ecmascript
Smile_Gently1 小时前
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
javascript·vue.js·elementui
一生躺平的仔1 小时前
# Rust遇上WebAssembly:让JavaScript的计算性能起飞!🚀
前端·javascript
IT 古月方源1 小时前
跨站脚本攻击(XSS)详解
运维·服务器·前端·网络·tcp/ip·网络安全·xss
你的码,就是我的码1 小时前
web服务器架构,websocket
服务器·前端·架构
彭友圈1012 小时前
HTML基础入门——简单网页页面
前端·前端框架·html
丁总学Java2 小时前
/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景
开发语言·javascript·ecmascript