简介
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数。
Lodash 通过降低 array、number、objects、string 等等的使用难度从而让语法变得更简单。
Lodash 的模块化方法 非常适用于:
- 遍历 array、object 和 string
- 对值进行操作和检测
- 创建符合功能的函数
安装
yarn add loads
模块格式
Lodash 提供 多种构建方式 和模块格式。
- lodash & per method packages
- lodash-es, babel-plugin-lodash, & lodash-webpack-plugin
- lodash/fp
- lodash-amd
功能简介
- Array,适用于数组类型,比如增删改查、填充数据(.fill)、查找元素(.findeIndex)、数组分片(_.chunk)等操作
- Collection,适用于数组和对象类型,部分适用于字符串,比如遍历、分组、查找、过滤等操作
- Function,适用于函数类型,比如节流、延迟、缓存、设置钩子等操作
- Lang,普遍适用于各种类型,常用于执行类型判断和类型转换、深拷贝
- Math,适用于数值类型,常用于执行数学运算(最大值、最小值求和)
- Number,适用于生成随机数,比较数值与数值区间的关系
- Object,适用于对象类型,常用于对象的创建、扩展、类型转换、检索、集合等操作
- Seq,常用于创建链式调用,提高执行性能(惰性计算)
- String,适用于字符串类型
- Util,一些工具函数,比如_.attmpt 替代 try-catch 的方式,当解析 JSON 出错时,该方法会返回一个Error对象
- Properties, 模板方法 ES6的模板字符串和这个功能很像(对模板字符串进行了正则解析,将需要填入数据的位置预留出来,拼接成一个字符串)
- Methods, 对lodash函数的引用
数组 Array
_.chunk
_.chunk(array, [size=1])
将数组 array 拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
参数:
- array (Array): 传入的数组(允许字符串),如果传入的参数没有length属性,返回空数组;
- [size=1] (number): 划分的子数组的长度(不传默认为1),如果是非正数,返回空数组;如果是正小数,size=parseInt(size);
返回: - (Array): 返回一个包含拆分区块的新数组(一个二维数组)。
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
_. compact
__.compact(array)
创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, "", undefined, 和 NaN 都是被认为是“假值”。
参数:
- array (Array): 如果传入字符串,得到的效果类似对字符串执行split(' ')方法。
返回: - (Array): 返回新数组。
_.compact([0, 1, false, true, 2, '', 3]);
// => [1, 2, 3]
_. concat(JS 自带的concat()方法类似)
_.concat(array, [values])
创建一个新数组,将array与任何数组 或 值连接在一起。
参数:
- array (Array): 被连接的数组。
- [values] (...*): 连接的值。
返回:
(Array): 返回连接后的新数组。
let array = [1];
let other = _.concat(array, 2, [3], [[4]]);
console.log(other);
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
_. join (类似自带的join()函数)
_.join(array, [separator=','])
将 array 中的所有元素转换为由 separator 分隔的字符串。
_.join(['a', 'b', 'c'], '~');
// => 'a~b~c'
_. nth
_.nth(array, [n=0])
获取array数组的第n个元素。如果n为负数,则返回从数组结尾开始的第n个元素。
const array = ['a', 'b', 'c', 'd'];
_.nth(array, 1);
// => 'b'
_.nth(array, -2);
// => 'c';
_. pull
_.pull(array, [values])
移除数组array中所有和给定值相等的元素,使用 SameValueZero 进行全等比较。
const array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]
_.pullAll
_. pullAll(array, [values])
这个方法类似 pull ,区别是这个方法接收一个要移除值的数组。
const array = [1, 2, 3, 1, 2, 3];
_.pullAll(array, [2, 3]);
console.log(array);
// => [1, 1]
_.fromPairs(pairs)
将一个json数组重新组装变为json对象。
参数:
- pairs (Array): 键值对pairs。
_.fromPairs([['fred', 30], ['barney', 40]]);
// => { 'fred': 30, 'barney': 40 }
语言
_.castArray
_.castArray(value)
如果 value 不是数组, 那么强制转为数组。
参数:
- value (*): 要处理的值。
返回 - (Array): 返回转换后的数组。
_.castArray(1);
// => [1]
_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]
_.castArray('abc');
// => ['abc']
_.castArray(null);
// => [null]
_.castArray(undefined);
// => [undefined]
_.castArray();
// => []
_.isEmpty
_.isEmpty(value)
检查 value 是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0 的 arguments object, array, string 或类jquery选择器。
参数:
- value (*): 要检查的值。
返回 - (boolean): 如果 value 为空,那么返回 true,否则返回 false。
_.isEmpty(null);
// => true
_.isEmpty(true);
// => true
_.isEmpty(1);
// => true
_.isEmpty([1, 2, 3]);
// => false
_.isEmpty({ 'a': 1 });
// => false
_.isEqual
_.isEqual(value, other)
执行深比较来确定两者的值是否相等。
这个方法支持比较 arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object objects, regexes, sets, strings, symbols, 以及 typed arrays. Object 对象值比较自身的属性,不包括继承的和可枚举的属性。 不支持函数和DOM节点比较。
参数
- value (*): 用来比较的值。
- other (*): 另一个用来比较的值。
返回 - (boolean): 如果 两个值完全相同,那么返回 true,否则返回 false。
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
字符串
_.split
_.split([string=''], separator, [limit])
根据separator 拆分字符串string
参数
- [string=''] (string): 要拆分的字符串。
- separator (RegExp|string): 拆分的分隔符。
- [limit] (number): 限制结果的数量。
返回 - (Array): 返回拆分部分的字符串的数组。
_.split('a-b-c', '-', 2);
// => ['a', 'b']
_.trim
_.trim([string=''], [chars=whitespace]);
从string字符串中移除前面和后面的 空格 或 指定的字符。
参数
- [string=''] (string): 要处理的字符串。
- [chars=whitespace] (string): 要移除的字符。
返回 - (string): 返回处理后的字符串。
_.trim(' abc ');
// => 'abc'
_.trim('-_-abc-_-', '_-');
// => 'abc'
_.words
_.words([string=''], [pattern])
拆分字符串string中的词为数组 。
参数
- [string=''] (string): 要拆分的字符串。
- [pattern] (RegExp|string): 匹配模式。
返回 - (Array): 返回拆分string后的数组。
_.words('fred, barney, & pebbles');
// => ['fred', 'barney', 'pebbles']
_.words('fred, barney, & pebbles', /[^, ]+/g);
// => ['fred', 'barney', '&', 'pebbles']
_.pad
_.pad([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则从左侧和右侧填充字符。 如果没法平均分配,则截断超出的长度。
参数
- [string=''] (string): 要填充的字符串。
- [length=0] (number): 填充的长度。
- [chars=' '] (string): 填充字符。
返回 - (string): 返回填充后的字符串。
_.pad('abc', 8);
// => ' abc '
_.pad('abc', 8, '_-');
// => '_-abc_-_'
_.pad('abc', 3);
// => 'abc'
_.padEnd
_.padEnd([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则在右侧填充字符。 如果超出length长度则截断超出的部分。
参数
- [string=''] (string): 要填充的字符串。
- [length=0] (number): 填充的长度。
- [chars=' '] (string): 填充字符。
返回
(string): 返回填充后的字符串。
_.padEnd('abc', 6);
// => 'abc '
_.padEnd('abc', 6, '_-');
// => 'abc_-_'
_.padEnd('abc', 3);
// => 'abc'
_.padStart
_.padStart([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则在左侧填充字符。 如果超出length长度则截断超出的部分(截断前边的)。
参数
- [string=''] (string): 要填充的字符串。
- [length=0] (number): 填充的长度。
- [chars=' '] (string): 填充字符。
返回 - (string): 返回填充后的字符串。
_.padStart('abc', 6);
// => ' abc'
_.padStart('abc', 6, '_-');
// => '_-_abc'
_.padStart('abc', 3);
// => 'abc'
集合
_.forEach
.forEach(collection, [iteratee=.identity])
调用 iteratee
遍历 collection
(集合) 中的每个元素, iteratee 调用3个参数: (value, index|key, collection)。 如果迭代函数(iteratee)显式的返回 false
,迭代会提前退出。
注意: 与其他"集合"方法一样,类似于数组,对象的 "length" 属性也会被遍历。想避免这种情况,可以用_.forIn
或者_.forOwn
代替。
参数
- collection (Array|Object): 一个用来迭代的集合。
- [iteratee=_.identity] (Function): 每次迭代调用的函数。
返回 -
(*): 返回集合 collection。
_.map
.map(collection, [iteratee=.identity])
创建一个数组, value(值) 是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后返回的结果。 iteratee(迭代函数)调用3个参数:
(value, index|key, collection).
参数
- collection (Array|Object): 用来迭代的集合。
- [iteratee=_.identity] (Array|Function|Object|string): 每次迭代调用的函数。
返回 - (Array): 返回新的映射后数组。
var users = [
{name: "张", "email": "zhang@email.com"},
{name: "江", "email": "jiang@email.com"},
{name: "李", "email": "li@email.com"}
];
var emails = users.map(function (user) { return user.email; });
console.log(emails.join(", "));
// => zhang@email.com, jiang@email.com, li@email.com