因为项目中有在使用Lodash的用法,发现蛮好用的,于是乎上官方文档学习了一下相关方法,话不读说,先附上官网地址:
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。
介绍几个我在项目中使用的方法:
(1)_.cloneDeep(value)
这个方法类似_.clone,除了它会递归拷贝 value。其实也叫深拷贝。
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- let objects = {
- name: '黎明',
- score: ['20', '30', '40'],
- hobby: {
- sing: '今夜你会不会来',
- index: 1
- }
- }
-
- let deep = _.cloneDeep(objects); //_.cloneDeep其实是一个深拷贝的方法
- objects.score.push('50')//验证一下深拷贝有没有拷贝下来数据
- console.log(deep);
- </script>
- </body>
-
- </html>
看一下运行结果:

可以看到已经完成了对数据的深拷贝了。
(2) _.uniqBy()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- //返回新的去重后的数组
- console.log(_.uniqBy([2.1, 1.2, 2.3], Math.floor));//向下取值 2.1 1.2
-
- console.log(_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'));//{ 'x': 1 }, { 'x': 2 }
- </script>
- </body>
-
- </html>
看一下运行结果:

(3) _.find()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.find()包含三个参数:
- // 1.一个用来迭代的集合,这里指的是users数组
- // 2.每次迭代调用的函数 ,这里指的是function(d){}这个函数
- // 3.开始搜索的索引位置 ,这里指的是满足d.age < 40 这个条件的第一项值
- let users = [
- { 'user': 'barney', 'age': 36, 'active': true },
- { 'user': 'fred', 'age': 40, 'active': false },
- { 'user': 'pebbles', 'age': 1, 'active': true }
- ];
-
- let res=_.find(users, function(d) { return d.age < 40; });//来寻找第一个满足条件的元素,其实就是数组的find方法
- console.log(res);//输出数组的第一项值,因为第一项满足条件了
- </script>
- </body>
-
- </html>
看一下运行结果:
![]()
(4) _.groupBy()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.groupBy()包含两个个参数:
- // 1.一个用来迭代的集合,这里指的是数组[6.1, 4.2, 6.3]
- // 2.这个迭代函数用来转换key ,这里指的是 4 和6 这两个key值
- let res= _.groupBy([6.1, 4.2, 6.3], Math.floor);//向下取值
- console.log(res);// => { '4': [4.2], '6': [6.1, 6.3] }
-
- </script>
- </body>
-
- </html>
看一下运行结果:

再举一个例子:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.groupBy()包含两个个参数:
- // 1.一个用来迭代的集合,这里指的是数组['one', 'two', 'three'],实际项目中这里其实是接口返回的数据(数组结构形式)
- // 2.这个迭代函数用来转换key ,这里指的是 3 和5 这两个key值,因为要输出数组的每一项数据
- let res= _.groupBy(['one', 'two', 'three'], 'length');
- console.log(res);
-
- </script>
- </body>
-
- </html>
看一下运行结果:

(5) _.map()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.map()包含两个参数:(其实就是数组的map方法)
- // 1.一个用来迭代的集合,这里指的是数组[4, 8],实际项目中这里其实是接口返回的数据(数组结构形式)
- // 2.每次迭代调用的函数 ,这里指的是fn这个函数
-
- //返回新的映射后数组,数组的长度并不会改变
- function fn(n) {
- return n * n;
- }
-
- let res= _.map([4, 8], fn);
- console.log(res); // [16, 64]
-
- </script>
- </body>
-
- </html>
看一下运行结果:
![]()
再举一个例子:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.map()包含两个参数:(其实就是数组的map方法)
- // 1.一个用来迭代的集合,这里指的是数组users ,实际项目中这里其实是接口返回的数据(数组结构形式)
- // 2.每次迭代调用的函数 ,这里指的是要遍历users数组的每一项值
-
- //返回新的映射后数组,数组的长度并不会改变
-
-
- let users = [{
- 'user': 'barney'
- },
- {
- 'user': 'fred'
- }
- ];
-
- // The `_.property` iteratee shorthand.
- let res = _.map(users, 'user');
- console.log(res); // => ['barney', 'fred'] 返回的是遍历的每一项值
-
- </script>
- </body>
-
- </html>
看一下运行结果:

(6) _.sumBy()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.sumBy包含两个参数:
- // 1.要迭代的数组,这里指的是数组objects,实际项目中这里其实是接口返回的数据(数组结构形式)
- // 2.调用每个元素的迭代函数 ,这里指的是function这个函数
-
- //返回总和
- let objects = [{
- 'n': 4
- }, {
- 'n': 2
- }, {
- 'n': 8
- }, {
- 'n': 6
- }];
-
- //下面这两种写法是等价的
- let res1 = _.sumBy(objects, function (o) {
- return o.n;//一个是返回每一项的值相加
- });
- console.log(res1); // => 20
-
- let res2 = _.sumBy(objects, 'n');//一个是把每一项的值直接传入
- console.log(res2); // => 20
- </script>
- </body>
-
- </html>
看一下运行结果:

(7) _.ceil()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- //_.ceil包含两个参数:其实就是Math.ceil()方法
- // 1.要向上舍入的值,这里指的是4.006 6.004 6040
- // 2.向上舍入的的精度 ,这里指的是 2 和-2
-
- //返回总和
- let res1 = _.ceil(4.006);
- console.log(res1); // => 5
-
- let res2 = _.ceil(6.004, 2); //保留2位小数
- console.log(res2); // => 6.01
-
- let res3 = _.ceil(6040, -2);
- console.log(res3);// => 6100
-
-
- </script>
- </body>
-
- </html>
看一下运行结果:

(8) _.filter()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- //_.filter包含两个参数:其实就是数组的filter方法
- // 1.一个用来迭代的集合,这里指的是数组users
- // 2.每次迭代调用的函数 ,这里指的是 function
-
- //返回一个新的过滤后的数组
- let users = [{
- 'user': 'barney',
- 'age': 36,
- 'active': true
- },
- {
- 'user': 'fred',
- 'age': 40,
- 'active': false
- }
- ];
-
- let res = _.filter(users, function (o) {
- return !o.active;
- }); //要过滤出取反的一项
- console.log(res); // => objects for ['fred']
- </script>
- </body>
-
- </html>
看一下运行结果:

(9) _.remove()
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
- </head>
-
- <body>
- <script>
- // _.remove包含两个参数:
- // 1.要修改的数组,这里指的是数组array
- // 2.每次迭代调用的函数 ,这里指的是 function
-
- //返回移除元素组成的新数组
- var array = [1, 2, 3, 4];
- var evens = _.remove(array, function (n) {
- return n % 2 == 0; //取余,其实是要输出偶数
- });
-
- console.log(array);// => [1, 3]
-
- console.log(evens);// => [2, 4]
- </script>
- </body>
-
- </html>
看一下运行结果:

就说这么多吧,详细的还是多看看官方文档,我这里只是大概介绍一下,不难的这个。