Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。
Lodash 提供的辅助函数主要分成下面几类,官方文档
- Array:适用于数组类型,比如填充数据、查找元素、数组分片等操作
- Collection:适用于数组和对象类型,部分用于字符串,比如分组、查找、过滤等操作
- Function:适用于函数类型,比如节流、延迟、缓存、设置钩子等操作
- Lang:普遍用于各种类型,常用语类型判断和类型转换
- Math:适用于数值类型,常用语执行数学运算
- Number:适用于生成随机数,比较数值与数值区间的关系
- Object:适用于对象类型,常用于对象的创建、扩展、类型转换、检索和集合等操作
- Seq:常用语创建链式调用,提高执行性能(惰性计算)
- String:适用于字符串类型
lodash/fp
模块提供了更接近函数式编程的开发方式,其内部的函数经过包装,具有 immutable、auto-curried、iteratee-first、data-last(官方介绍)等特点。Lodash 在 GitHub Wiki 中对lodash/fp 的特点做了如下概述:
- Fixed Arity:固化参数个数,便于柯里化
- Rearragned Arguments :重新调用参数位置,便于函数之间的聚合
- Capped Iteratee Argument:封装 Iteratee 参数
Array
_.chunk
创建一个包含元素的数组,该元素被分成大小相同的组。如果数组不能被评价分割,那么最后的块就是剩下的元素。
语法:
_.chunk(array,[size])
参数:
array(Array):目标数组
[size=1](number):每一块的长度
返回:
(Array):新的数组块
1 | _.chunk([1, 2, 3, 4, 5, 6], 2) |
_.compact
创建一个删除所有 falsey(也叫做 falsy ,虚值) 的数组。false、null、0、””、undefined和NaN是falsey。
语法:
_.compact(array)
参数:
array(Array):目标数组
返回:
(Array):返回筛选好值后的数组
1 | _.compact([false,null,0,"",undefined,1,3,4,5,NaN]) |
_.concat
创建一个新的数组,将数组与其他数组或者是值连接起来
语法:
_.concat(array,[values])
参数:
array(Array): 目标数组
[values](…*):连接后的值,可以是任何类型
返回:
(Array):返回新的连接数组
1 | _.concat([false,null,0,"",undefined,1,3,4,5,NaN],[2],null,null,{a:2}) |
_.difference
创建不包含在其他给定数组中的数组值的数组,用于相等比较。结果的值的顺序和引用有第一个数组决定。
语法:
_.difference(array,[values])
参数:
array(Array): 目标数组
[values](…Array):要排除的值
返回:
(Array):返回筛选后的新数组
1 | _.difference([false,null,0,"",undefined,1,3,4,5,NaN],[3],[null],[null],[{a:2}]) |
_.differenceBy
这个 Api 跟上面不同之处在于它接受 iteratee
,iteratee
为数组中的每个元素和值的调用,以生成比较它们的标准。结果值的顺序和引用还是由第一个数组决定。
语法:
_.differenceBy(array,[values],[iteratee=_.identity])
参数:
array(Array): 目标数组
[values](…Array):要排除的值
[iteratee=_.identity](Function):
iteratee
调用每个元素
返回:
(Array):返回筛选后的新数组
1 | _.differenceBy([4.6,1.2,3.3],[2.1],[3.2],Math.floor) |
_.drop
创建一个数组切片,从开始删除 n 个元素。
语法:
_.drop(array,[n=1])
参数:
array(Array): 目标数组
[n=1](number):要删除的元素的数量
返回:
(Array):返回数组的切片
1 | _.drop([1, 2, 3, 4, 5], -1) // [1,2,3,4,5] |
_.dropRight
与._drop
相似,创建一个数组切片,不同的是从数组结尾开始删除元素
语法:
_.dropRight(array,[n=1])
参数:
array(Array): 目标数组
[n=1](number):要删除的元素的数量
返回:
(Array):返回数组的切片
1 | _.dropRight([1, 2, 3, 4, 5], -1) // [1,2,3,4,5] |
_.dropRightWhile
创建一个数组切片,从末尾丢弃掉一些元素。被丢弃的元素是从末尾开始循环的,直到 predicate
返回 falsey
.predicate
函数有三个参数:value,index,array
语法:
_.dropRightWhile(array,[predicate=_.identity])
参数:
array(Array): 目标数组
[predicate=_.identity](Function):每次迭代要调用的函数
返回:
(Array):返回数组的切片
1 | var users = [ |
_.dropWhile
创建一个数组切片,从开头丢弃掉一些元素。被丢弃的元素是从开头开始循环的,直到 predicate
返回 falsey
.predicate
函数有三个参数:value,index,array
语法:
_.dropWhile(array,[predicate=_.identity])
参数:
array(Array): 目标数组
[predicate=_.identity](Function):每次迭代要调用的函数
返回:
(Array):返回数组的切片
1 | var users = [ |