为什么选择 Lodash?
Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。
Lodash 的模块化方法 非常适用于:
遍历 array、object 和 string
对值进行操作和检测
创建符合功能的函数
Array //数组
//将[values]中出现过的值都从array中去除 如将[1,2,3]中去除[2,4],最终得到[1,3]
_.difference(array, [values])
//找到符合条件元素的下标
_.findIndex(array, [predicate=_.identity], [fromIndex=0])
//摊平数组 1层 如将[1,2,[3,4,[3]]]变成[1,2,3,4,[3]]
_.flatten(array)
//摊平数组剩余1层 如将[1,2,[3,4,[3]]]变成[1,2,3,4,3] 类似于Linq中的SelectMany
_.flattenDeep(array)
//翻转数组
_.reverse(array)
//取数组前n个值
_.take(array, [n=1])
//往数组取值,直到不符合条件则停止取值
_.takeWhile(array, [predicate=_.identity])
//交集
_.intersection([arrays])
//求多个数组并集,再去重
_.union([arrays])
//将一个数组去重
_.uniq(array)
//将多个数组按照顺序合并 如[1,2]和[a,b] 将变成[[1,a],[2,b]]
_.zip([arrays])
Collection//集合,含:对象、数组、类数组(即带length属性)
//统计指定条件的数量
_.countBy(collection, [iteratee=_.identity])
//对集合所有元素进行指定操作
_.forEach(collection, [iteratee=_.identity])
//判断集合中是否全部满足指定条件 类似Linq中的All
_.every(collection, [predicate=_.identity])
//按照条件提取集合中的元素 类似Linq中的Where
_.filter(collection, [predicate=_.identity])
//根据条件查找元素 类似Linq中的First
_.find(collection, [predicate=_.identity], [fromIndex=0])
//指定条件对元素进行分组
_.groupBy(collection, [iteratee=_.identity])
//是否包含指定值
_.includes(collection, value, [fromIndex=0])
//这个非常重要 与原生的有区别 类似Linq中的Select
_.map(collection, [iteratee=_.identity])
//排序
_.orderBy(collection, [iteratees=[_.identity]], [orders])
//最强大的方法,可以实现map和filter
_.reduce(collection, [iteratee=_.identity], [accumulator])
//判断集合中是否至少存在一个符合条件的元素
_.some(collection, [predicate=_.identity])
Function
//防抖动 一般用在改变窗口大小或者滚动条移动时触发比较昂贵的操作时使用,或者浮窗等延迟显示消失时使用
_.debounce(func, [wait=0], [options={}])
//节流 一般在点击按钮多次,但只希望生效1(或尽可能少)次的时候使用
_.throttle(func, [wait=0], [options={}])
//防抖动和节流有微妙的差别,基本都是防止昂贵的操作被多次触发,需要使用加深理解
//-可不看-START-//
//将一个断言函数结果取反
_.negate(predicate)
//柯里化函数
_.curry(func, [arity=func.length])
//部分应用
_.partial(func, [partials])
//返回一个带记忆的函数
_.memoize(func, [resolver])
//包装函数
_.wrap(value, [wrapper=identity])
//-可不看-END-//
Lang
//深拷贝 对数据不敏感的时候可以直接使用JSON的序列化和反序列化进行深拷贝
_.cloneDeep(value)
//-可不看-START-//
//判断值是否为Array类对象
_.isArray(value)
//包括全部的is函数,都是定义新函数时实现重载的辅助函数
//-可不看-END-//
Object
//将sources的值赋予object,如果object中的key不存在的话,一般用于定义函数的默认值,左边是用户传入的值,右边是默认值
_.defaults(object, [sources])
//指定key获取对象中属性的对象
_.pick(object, [props])
//将对象的值和键互换
_.invert(object)
Seq
//惰性链式调用,可提高性能和可读性,最后必须使用value()显式获取值
_.chain(value)
//-可不看-START-//
//链式调用时用于调试打印中间值
_.tap(value, interceptor)
//带返回值的tap
_.thru(value, interceptor)
//-可不看-END-//
String
//是否以指定字符开始
_.startsWith([string=''], [target], [position=0])
//是否以指定字符结束
_.endsWith([string=''], [target], [position=string.length])
//有时候传参的文本需要转义 将html中的符号 & < >转义
_.escape([string=''])
//左对齐 如将月份的1 左对齐为 01
_.padEnd([string=''], [length=0], [chars=' '])
//右对齐
_.padStart([string=''], [length=0], [chars=' '])
//将字符串拼接n次
_.repeat([string=''], [n=1])
//去掉两边空字符串
_.trim([string=''], [chars=whitespace])
//去掉右边空字符串
_.trimEnd([string=''], [chars=whitespace])
//去掉左边空字符串
_.trimStart([string=''], [chars=whitespace])
//截断字符串,如果超出指定长度,将以...显示多出的字符
_.truncate([string=''], [options={}])
Util
//返回空方法体 在定义高阶函数时作为默认值很有用
_.noop()
//创建有规律的数组 如生成1到100的数组 [1,2,3,4,5...100]
_.range([start=0], end, [step=1])
//-可不看-START-//
//函数组合 一个函数的结果是另一个函数的参数 适用于函数式编程的pointfree风格 类似于 y=f(x) ,z=g(y),那么可以写成 z=g(f(x))
_.flow([funcs])
//从右结合 更常用
_.flowRight([funcs])
//-可不看-END-//