js工具库Lodash的使用

目录

Lodash是什么:

 Lodash的主要功能:

数组操作(Array)

集合操作(Collection)

函数操作(Function)

对象操作(Object)

实用工具(Util)

字符串操作(String)

数学计算(Math)

序列操作(Seq)

 Lodash的安装与使用:

npm安装:

项目中引入(二选一):

使用示例:

数组操作(Array)

集合操作(Collection)

函数操作(Function)

对象操作(Object)

实用工具(Util)

字符串操作(String)

数学计算(Math)

序列操作(Seq)

日期处理


Lodash是什么:

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。 Lodash 的模块化方法 非常适用于:

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数

 Lodash的主要功能(用法请看使用示例):

数组操作(Array)
方法名功能描述
_.chunk将数组拆分为指定大小的块
_.compact移除数组中的所有假值(false, null, 0, "", undefined, NaN)
_.concat连接多个数组/值
_.difference返回第一个数组中不包含在其他给定数组中的值
_.drop从数组开头移除指定数量的元素
_.dropRight从数组末尾移除指定数量的元素
_.fill使用指定值填充数组的部分或全部元素
_.findIndex返回满足条件的第一个元素的索引
_.flatten减少一级数组嵌套深度
_.flattenDeep递归将多维数组展平为一维数组
_.head获取数组的第一个元素
_.indexOf获取值在数组中的索引
_.intersection返回多个数组的交集元素
_.join将数组元素连接成字符串
_.last获取数组的最后一个元素
_.pull移除数组中所有给定的值
_.reverse反转数组
_.slice裁剪数组的一部分
_.sortedUniq对已排序数组进行去重
_.tail获取除第一个元素外的所有元素
_.take从数组开头获取指定数量的元素
_.union返回多个数组的并集(去重)
_.uniq数组去重
_.without创建排除指定值的新数组
_.zip将多个数组对应位置的值分组
集合操作(Collection)
方法名功能描述
_.countBy根据转换函数的结果统计元素数量
_.each遍历集合中的每个元素(别名:_.forEach
_.every检查集合中所有元素是否满足条件
_.filter筛选满足条件的元素
_.find查找满足条件的第一个元素
_.groupBy根据转换函数的结果对元素分组
_.includes检查值是否在集合中存在
_.keyBy根据指定键值创建对象
_.map对集合中每个元素执行转换函数
_.orderBy按指定属性和排序方向对集合排序
_.partition将集合分为满足条件和不满足条件两组
_.reduce将集合缩减为单个值
_.sample随机获取集合中的一个元素
_.shuffle打乱集合的顺序
_.size获取集合的长度
_.some检查集合中是否有元素满足条件
_.sortBy按指定属性升序排序
函数操作(Function)
方法名功能描述
_.after创建调用指定次数后才执行的函数
_.bind绑定函数的this指向
_.curry创建柯里化函数
_.debounce创建防抖函数(延迟执行)
_.delay延迟调用函数
_.flip翻转函数参数的顺序
_.memoize创建带缓存的函数
_.once创建只能执行一次的函数
_.partial部分应用函数参数
_.throttle创建节流函数(限制执行频率)
_.unary创建只接受一个参数的函数
对象操作(Object)
方法名功能描述
_.assign复制源对象的可枚举属性到目标对象(别名:_.extend
_.at根据路径获取对象的值
_.clone浅拷贝对象
_.cloneDeep深拷贝对象
_.defaults为对象设置默认值
_.findKey查找满足条件的第一个属性键
_.forIn遍历对象自身的和继承的可枚举属性
_.forOwn遍历对象自身的可枚举属性
_.get根据路径安全获取对象的值
_.has检查对象是否有指定路径的属性
_.invert反转对象的键值对
_.keys获取对象自身的可枚举属性名
_.mapKeys通过函数映射对象的键名
_.mapValues通过函数映射对象的值
_.merge递归合并多个对象
_.omit排除对象中指定的属性
_.pick选择对象中指定的属性
_.set根据路径设置对象的值
_.toPairs将对象转换为键值对数组(别名:_.entries
_.values获取对象自身的可枚举属性值
实用工具(Util)
方法名功能描述
_.times调用函数指定次数并返回结果
_.random生成指定范围内的随机数
_.range生成数字范围数组
_.escape转义字符串中的HTML特殊字符
_.noop空函数(返回undefined)
_.uniqueId生成全局唯一ID
_.camelCase将字符串转换为驼峰式
_.capitalize将字符串首字母大写
_.isEqual执行深度比较判断值是否相等
_.isFunction检查值是否为函数
_.isObject检查值是否为对象
_.isArray检查值是否为数组
_.isEmpty检查值是否为空(对象/集合/映射)
_.isString检查值是否为字符串
_.isNumber检查值是否为数字
_.isDate检查值是否为Date对象
_.isError检查值是否为Error对象
_.isNaN检查值是否为NaN
_.isNil检查值是否为null或undefined
_.isPlainObject检查值是否为普通对象(通过{}或new Object创建)
字符串操作(String)
方法名功能描述
_.deburr去除字符串中的变音符号
_.endsWith检查字符串是否以指定子串结尾
_.kebabCase将字符串转换为短横线分隔式
_.lowerCase将字符串转换为空格分隔的小写单词
_.pad在字符串两侧填充字符到指定长度
_.repeat重复字符串指定次数
_.replace替换字符串中匹配的子串
_.snakeCase将字符串转换为下划线分隔式
_.startCase将字符串转换为每个单词首字母大写
_.startsWith检查字符串是否以指定子串开头
_.template创建模板字符串
_.toLower将字符串转换为小写
_.toUpper将字符串转换为大写
_.trim去除字符串两端的空白字符
_.truncate截断字符串并添加省略号
_.unescape反转义HTML特殊字符
_.words将字符串拆分为单词数组
数学计算(Math)
方法名功能描述
_.add两数相加
_.ceil向上取整
_.floor向下取整
_.max获取数组中的最大值
_.mean计算数组的平均值
_.min获取数组中的最小值
_.round四舍五入取整
_.sum计算数组值的总和
序列操作(Seq)
方法名功能描述
_.chain创建链式操作序列
_.tap在链式操作中拦截值
_.thru在链式操作中修改值
_.prototype.value执行链式操作并返回结果

 Lodash的安装与使用:

npm安装:
$ npm i --save lodash
项目中引入(二选一):
const _ = require('lodash');

import _ from 'lodash';
使用示例:
数组操作(Array)
// 分块
_.chunk(['a', 'b', 'c', 'd'], 2); // => [['a','b'], ['c','d']]

// 去假值
_.compact([0, 1, false, 2, '', 3]); // => [1, 2, 3]

// 深度扁平化
_.flattenDeep([1, [2, [3, [4]], 5]); // => [1, 2, 3, 4, 5]

// 差集
_.difference([2, 1], [2, 3]); // => [1]

// 去重
_.uniq([2, 1, 2]); // => [2, 1]

// 交集
_.intersection([2, 1], [2, 3]); // => [2]
集合操作(Collection)
const users = [
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 }
];

// 分组
_.groupBy(users, 'age'); // => { '36': [barney对象], '40': [fred对象] }

// 键值映射
_.keyBy(users, 'user'); // => { 'barney': barney对象, 'fred': fred对象 }

// 条件统计
_.countBy(users, user => user.age > 36); // => { 'false': 1, 'true': 1 }

// 多条件排序
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);

// 随机取样
_.sample([1, 2, 3, 4]); // => 随机一个元素
函数操作(Function)
// 防抖(停止操作500ms后执行)
const debounced = _.debounce(() => console.log('Resized!'), 500);
window.addEventListener('resize', debounced);

// 节流(每100ms最多执行一次)
const throttled = _.throttle(() => console.log('Scrolling!'), 100);
window.addEventListener('scroll', throttled);

// 单次执行
const init = _.once(() => console.log('Initialized!'));
init(); // => 'Initialized!'
init(); // 无效果

// 柯里化
const add = (a, b) => a + b;
const curried = _.curry(add);
curried(1)(2); // => 3
对象操作(Object)
const obj = { 'a': 1, 'b': 2 };
const nested = { 'a': { 'b': { 'c': 3 } } };

// 安全取值
_.get(nested, 'a.b.c'); // => 3
_.get(nested, 'a.b.d', 'default'); // => 'default'

// 排除属性
_.omit(obj, ['a']); // => { 'b': 2 }

// 选择属性
_.pick(obj, ['b']); // => { 'b': 2 }

// 深度合并
_.merge({ 'a': 1 }, { 'b': 2 }); // => { 'a': 1, 'b': 2 }

// 深度克隆
const cloned = _.cloneDeep(nested);
实用工具(Util)
// 类型检查
_.isArray([1, 2, 3]); // => true
_.isObject({}); // => true
_.isEmpty(null); // => true

// 范围生成
_.range(4); // => [0, 1, 2, 3]

// 唯一ID
_.uniqueId('contact_'); // => 'contact_1'

// 深度比较
_.isEqual({ 'a': 1 }, { 'a': 1 }); // => true

// 执行多次
_.times(3, () => console.log('Hello')); // 打印3次Hello
字符串操作(String)
// 驼峰转换
_.camelCase('Foo Bar'); // => 'fooBar'

// 短横线命名
_.kebabCase('fooBar'); // => 'foo-bar'

// 截断文本
_.truncate('hi-diddly-ho there', { 'length': 14 }); // => 'hi-diddly-ho...'

// 填充字符
_.pad('abc', 8, '_-'); // => '_-abc_-_'

// 首字母大写
_.capitalize('FRED'); // => 'Fred'
数学计算(Math)
// 数组求和
_.sum([4, 2, 8, 6]); // => 20

// 最大值
_.max([4, 2, 8, 6]); // => 8

// 平均值
_.mean([4, 2, 8, 6]); // => 5

// 向上取整
_.ceil(4.006); // => 5

// 随机数
_.random(5, 10); // => 5到10之间的整数
序列操作(Seq)
// 链式调用
const result = _.chain([1, 2, 3])
  .map(n => n * 2)
  .filter(n => n > 2)
  .value(); // => [4,6]

// 链式中间操作
_.chain([1, 2, 3])
  .tap(array => array.pop())
  .value(); // => [1,2]
日期处理
// 日期比较(需安装lodash-date)
_.date.compare(new Date(2023, 0, 1), new Date(2023, 0, 2), 'day'); // => -1

总结:

虽然现代JavaScript引入了许多新特性,但Lodash仍然具有不可替代的优势:

  1. 稳定性与可靠性:超过10年的开发迭代,处理了各种边界情况

  2. 性能优化:针对大型数据集的操作进行了深度优化

  3. 丰富功能:提供精心设计的实用函数

  4. 一致性API:所有函数保持一致的参数结构和命名规范

无论是处理复杂的数据转换、优化应用性能,还是简化日常开发任务,Lodash都能提供优雅而高效的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值