简介:
Lodash是一个内部封装了诸多对字符串、数组、对象等常见的数据类型的处理函数的一套工具库,它使用延迟计算,使得其性能大大提升,延迟计算意味着在我们的链式方法在显示或者隐藏式的value()调用之前式不会执行的。由于这种执行的延后,因此lodash可以进行shortcut fusion这样的优化,通过合并链式iteratee大大降低迭代次数。从而大大提升性能
安装lodash:
npm install lodash
或
yarn add lodash
lodash提高JS原生方法性能:
例如:
//引入lodash
const _ = require('lodash')
//首先生成length=1000000的随机数数组arr
var arr = [];
for (var i = 0; i < 100000000; i++) {
arr.push(Math.floor(Math.random() * 10000))
}
//使用lodash forEach 遍历方法
console.time();
_.forEach(arr, function (key) {});
console.timeEnd(); //60.931ms
//原生JavaScript forEach 遍历方法
console.time();
arr.forEach(function (key) {});
console.timeEnd(); //1142.288ms
取俩数组的差集
let A = [{id:1,name:"小明"},{id:2,name:"小红"},{id:3,name:"光头强"}]
let B = [{id:1,name:"小明"},{id:2,name:"小红"}]
function difference() {
//_.filter 返回满足条件的数组
return _.filter(A, (item) => {
//_.find查询 (B数组内对象有没有id)=(A中item的id) 没有返回null / 所以当没有时return true
return _.find(B, { 'id': item.id }) == null
})
}
difference() //[{id:3,name:"光头强"}]
常用的lodash方法:
例如:
const _ = require('lodash')
_.range(10) //1.生成元素为0到9的数组
_.uniqueId() //2.生成不同的id,用于元素中的id值再好不过
.mapKeys //遍历重写key, 相当于.forIn
.mapValues //遍历重写value , 相当于.forIn
_.invert //反转映射,快速通过value值找key
_.max(array) //最大
_.min(array) //最小
_.sum(array) //求和
_.random(0, 10) //生成1~10的随机数
_.round(4.006, 2); //四舍五入,保留两位小数 4.01
_.isNumber(3) //true 返回(true / false)
_.isInterger()
_.isFunction()
_.isPlainObject()
_.isArray()
_.isDate()
_.isElement()
_.isEmpty({ 'a': 1 }) //false 检查是否为一个空对象
_.isEqual() //支持对象和数组
_.cloneDeep //深度复制
_.clone //浅复制
_.once //只执行一次
_.before //最多n-1次
_.after //n次后执行
_.debounce //忽略频繁执行
_.union //合并两数组,去重
_.uniq //去重
_.remove(array, function) //直接在array移除在function返回true的元素
_.sameple(array) //随机取1
_.samepleSize(array, int) // 随机取n
_.shuffle(array) //乱序, jQuery.shuffle
_.find(array, function | object) //根据function返回值和对象查找1个结果
_.filter(array, function | object) //根据function返回值和对象查找多个结果
_.groupBy(array, string) //分组,与多合一相反
_.keyBy(array, string) //分组,类似groupBy, 但只有唯一值
_.countBy(array, string) //分组统计
_.xor(array1,array2) //得到非交集,元素是Object用xorBy
_.intersection(array1,array2) //得到交集,元素是Object用intersectionBy