安装lodash
建议安装lodash-es,lodash-es 是 lodash 的 es modules 版本 ,是着具备 ES6 模块化的版本,体积小。按需引入。
示例
javascript
npm i lodash-es
import { chunk,compact } from 'lodash-es'; /**按需引入*/
1.chunk 数组分组
chunk(array, [size=1])
参数
array (Array): 需要处理的数组
[size=1] (number): 每个数组区块的长度 */
示例
javascript
const arr = [2, 4, 6, 8, 10];
const newArr = chunk(arr, 3);
console.log("newArr:", newArr);
// [ [ 2, 4, 6 ], [ 8, 10 ] ]
2.compact 过滤假值
创建一个新数组,包含原数组中所有的非假值元素。例如false, null,0, "", undefined, 和 NaN 都是被认为是"假值"。
compact(array)
参数
array (Array): 待处理的数组 */
示例
javascript
const arr = [0, 1, false, 2, "", 3];
const newArr = compact(arr);
console.log("newArr:", newArr);
// [ 1, 2, 3 ]
3.differenceBy 根据指定的规则去除指定的值
differenceBy(array, [values], [iteratee=_.identity])
调用array
和 values
中的每个元素以产生比较的标准。 结果值是从第一数组中选择。iteratee 会调用一个参数:(value) 。(注:首先使用迭代器分别迭代array
和 values
中的每个元素,返回的值作为比较值)。
参数
array
(Array): 要检查的数组。[values]
(...Array): 排除的值。[iteratee=_.identity]
(Array|Function|Object|string): iteratee 调用每个元素。示例
示例:
javascript
differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// => [3.1, 1.3]
/*上面的代码实际上是两个数组根据第三个参数Math.floor进行迭代处理,
最后两个数组根据[3,2,1]和[4,2]进行比较*/
// The `_.property` iteratee shorthand.
differenceBy([{ 'x': 2,'y':1 }, { 'x': 1,'y':2 }], [{ 'x': 1,'y':1 }], 'y');
// => [{ 'x': 1,'y':2 }]
/*上面的代码实际上是两个数组根据第三个参数'y'进行迭代处理,
最后两个数组根据 键'y' 进行比较*/
4.differenceWith 根据比较器去除指定的值
differenceWith(array, [values], [comparator])
它接受一个 comparator
(注:比较器),它调用比较array
,values
中的元素。 结果值是从第一数组中选择。comparator 调用参数有两个:(arrVal, othVal)。
参数
array
(Array): 要检查的数组。[values]
(...Array): 排除的值。[comparator]
(Function): comparator 调用每个元素。
示例
javascript
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
differenceWith(objects, [{ 'x': 1, 'y': 2 }], isEqual);
// => [{ 'x': 2, 'y': 1 }]
/*以上代码根据比较器isEqual比较两个数组里的值是否相等(不比较地址),
是的话去除*/
5. tail
获取除了array
数组第一个元素以外的全部元素
tail(array)
参数
array
(Array): 要检索的数组。
示例
javascript
const arr = [{ name: "xiaoming" }, { name: "dog" }, { name: "cat" }];
const newArr = tail(arr);
console.log(newArr);
//[ { "name": "dog" }, { "name": "cat" } ]
6.unionBy 合并数组,并且根据指定的规则去重
unionBy([arrays], [iteratee=_.identity])
参数
[arrays]
(...Array): 要检查的数组。[iteratee=_.identity]
(Array|Function|Object|string): 迭代函数,调用每个元素。
示例
javascript
const arr = [{ name: "xiaoming" }];
const newArr = unionBy(
arr,[{ name: "dog" }, { name: "xiaoming" }],"name"
);
console.log(newArr);
//[ { "name": "xiaoming" }, { "name": "dog" } ]
unionBy([2.1], [1.2, 2.3], Math.floor);
// => [2.1, 1.2]
7.unionWith 合并数组,根据比较器去重
unionWith([arrays], [comparator])
参数
[arrays]
(...Array): 要检查的数组。[comparator]
(Function): 比较函数,调用每个元素。
javascript
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
unionWith(objects, others, isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
8.size 检测数据长度
size(collection)
参数
collection
(Array|Object|String): 要检查的数据
示例
javascript
size([1, 2, 3]);
// => 3
size({ 'a': 1, 'b': 2 });
// => 2
size('pebbles');
// => 7
9.sortBy 数组对象排序
sortBy(collection, [iteratees=[_.identity]])
参数
collection
(Array|Object): 用来迭代的集合。[iteratees=[_.identity]]
(...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])): 这个函数决定排序。
javascript
const users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 34 }
];
sortBy(users, function(o) { return o.user; });
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
sortBy(users, 'age' });
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
sortBy(users, ['user', 'age']);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
sortBy(users, 'user', function(o) {
return Math.floor(o.age / 10);
});
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
10.clone 浅拷贝
clone(value)
参数
value
(*): 要拷贝的值
示例
javascript
const objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow = clone(objects);
console.log(shallow[0] === objects[0]);
// => true
11.cloneDeep 深拷贝
cloneDeep(value)
参数
value
(*): 要深拷贝的值。
示例
javascript
const objects = [{ 'a': 1 }, { 'b': 2 }];
const deep = cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
12.isEqual
深比较来确定两者的值是否相等
isEqual(value, other)
参数
value
(*): 用来比较的值。other
(*): 另一个用来比较的值。
javascript
const arr = [
{ name: "xiaoming" },
{ name: "dog" },
{ name: "cat", info: { address: "翻斗花园" } },
];
const newArr = [
{ name: "xiaoming" },
{ name: "dog" },
{ name: "cat", info: { address: "翻斗花园" } },
];
console.log(isEqual(arr, newArr));
// true
arr === newArr;
// => false
13. 二次封装防抖,节流
javascript
import {throttle,debounce} from 'lodash-es';
//节流
export const throttled = throttle(
(fun, ...args) => fun(...args),
1500,
{
leading: true,
trailing: false
}
);
//防抖
export const debounced = debounce(
(fun, ...args) => fun(...args),
500
);
//页面使用
<button @click=throttled(handleQuery,name,id)>查询</button>