什么是Lodash
一、什么是lodash
在 JavaScript 开发中,Lodash 是一个非常受欢迎的实用工具库,旨在提供高效、模块化的实用函数,帮助开发者更轻松地处理数组、对象、字符串等常见数据结构。它是对 JavaScript 原生方法的增强和优化,它在开发中提供了大量的便捷方法,帮助开发者提高效率,简化代码,广泛应用于前端开发、Node.js 项目等场景 。Lodash 的名字来源于“low dash”,寓意其低调而强大的功能。这个库最初由 John-David Dalton 创建,现已成为现代 JavaScript 开发的标配工具之一。
二、lodash工作原理
lodash 内部采用了函数式编程的理念。它通过对传入的数据进行分析,根据不同的数据类型和操作需求,执行相应的算法逻辑。例如,在处理数组时,它会利用数组的原生方法,结合自身优化的算法来实现诸如数组遍历、过滤、映射等操作。在处理对象时,lodash 会深入对象内部,对对象的属性进行访问、修改等操作。它还利用了闭包、高阶函数等 JavaScript 特性,将复杂的操作封装成一个个独立的函数,使得开发者可以方便地调用和组合这些函数,实现更复杂的功能。同时,lodash 对性能进行了大量优化,通过缓存机制、减少不必要的计算等方式,提升函数的执行效率。
三、lodash安装和使用
// npm安装lodash
npm install lodash// 在项目中引入lodash
import _ from 'lodash'// 如果只需要使用某些功能,也可以选择按需导入,减少包的体积
import { map, debounce, cloneDeep } from 'lodash'const numbers = [1, 2, 3, 4, 5];
const doubled = _.map(numbers, num => num * 2)
console.log(doubled); // 输出:[2, 4, 6, 8, 10]
四、lodash常用示例
1.过滤数组:使用_.filter函数筛选出数组中符合特定条件的元素
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = _.filter(numbers, (number) => number % 2 === 0);
console.log(evenNumbers); // 输出: [2, 4]2.查找元素:通过_.find函数找到数组中第一个满足条件的元素
const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 30 },{ name: 'Charlie', age: 35 }
];
const user = _.find(users, { name: 'Bob' });
console.log(user); // 输出: { name: 'Bob', age: 30 }3.合并对象:利用_.merge函数将多个对象合并成一个对象
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const mergedObj = _.merge({}, obj1, obj2);
console.log(mergedObj); // 输出: { a: 1, b: 2 }4.获取对象属性:使用_.get函数安全地获取对象的属性,避免因属性不存在而导致的错误
const user = { address: { city: 'New York' } };
const city = _.get(user, 'address.city');
console.log(city); // 输出: New York5.遍历数组 _.map:对数组中的每个元素执行回调函数,并返回结果数组
const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 30 },{ name: 'Charlie', age: 35 }
];
const names = _.map(users, 'name');
console.log(names); // 输出:['Alice', 'Bob', 'Charlie']6.对象合并 _.assign:将多个对象的属性合并到一个对象中
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const result = _.assign({}, obj1, obj2);
console.log(result); // 输出:{ a: 1, b: 3, c: 4 }7.使用_.cloneDeep深拷贝对象
const obj = { a: 1, b: { c: 2 } };
const cloneObj = _.cloneDeep(obj);
console.log(cloneObj); // { a: 1, b: { c: 2 } }8.数组排序 _.sortBy()实现排序 (默认执行升序排序)
const numbers = [3, 1, 4, 2, 5];
const sortedNumbers = _.sortBy(numbers); // 升序排序
console.log(sortedNumbers); // [1, 2, 3, 4, 5]9.柯里化函数_.curry:将函数转换为柯里化函数
const add = (a, b) => a + b;
const curriedAdd = _.curry(add);
console.log(curriedAdd(2)(3)); // 输出:5
五、lodash优势和特点
①.丰富的功能
lodash 提供了超过 200 个函数,几乎涵盖了 JavaScript 开发中所有常见的数据操作需求。从简单的数组遍历到复杂的对象深拷贝,开发者无需再花费大量时间自己编写实现代码,直接使用 lodash 的函数即可。
②.跨平台支持
无论是在浏览器环境下的前端开发,还是在 Node.js 服务器端的后端开发,lodash 都能完美运行。这使得开发者可以在不同的项目场景中统一使用 lodash,降低学习成本和代码维护成本。
③.性能优化
lodash 的开发者对函数的性能进行了精心优化。在处理大量数据时,lodash 的函数往往比原生 JavaScript 方法执行速度更快。例如,在数组排序等操作上,lodash 通过采用更高效的排序算法,提升了排序的效率。
④.代码简洁易读
使用 lodash 可以使代码更加简洁明了。原本需要多行代码实现的功能,使用 lodash 可能只需一行。例如,使用_.map和_.filter等函数,能够以声明式的方式表达代码逻辑,让阅读代码的人更容易理解代码的意图。
六、lodash应用场景
①.前端开发
在前端项目中,Lodash 常用于处理用户输入、数据格式化和 DOM 操作。例如,使用 Lodash 的字符串处理函数来格式化用户输入的文本,或者使用数组操作函数来处理列表数据。
②.后端开发
在 Node.js 项目中,Lodash 可以用于处理服务器端的数据操作和逻辑处理。例如,使用 Lodash 的对象操作函数来合并配置文件,或者使用函数式编程工具来实现复杂的业务逻辑。
③.数据处理
Lodash 提供了强大的数据处理功能,适用于各种数据处理场景。无论是简单的数据筛选还是复杂的聚合计算,Lodash 都能轻松应对。
④.工具开发
由于 Lodash 的功能丰富且性能高效,它也常被用于开发各种工具库和框架。开发者可以基于 Lodash 提供的底层功能,快速构建出功能强大的工具。
总结:
Lodash通过提供标准化、高性能的工具函数,显著提升了开发效率和代码质量。虽然现代ES6+语法已覆盖部分功能,但在处理复杂逻辑、需要浏览器兼容性、追求性能极致的场景下,Lodash仍是不可替代的选择。它能够显著提升你的编码体验和生产力。
相关文章:
什么是Lodash
一、什么是lodash 在 JavaScript 开发中,Lodash 是一个非常受欢迎的实用工具库,旨在提供高效、模块化的实用函数,帮助开发者更轻松地处理数组、对象、字符串等常见数据结构。它是对 JavaScript 原生方法的增强和优化,它在开发中提…...
【笔试强训day19】
目录 第一题:小易的升级之路 描述 输入描述: 输出描述: 输入: 输出: 第二题:礼物的最大价值 描述 输入: 返回值: 备注: 第三题:对称之美 题目描述…...
STM32电机库 电机控制特性
ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…...
【Linux】42.网络基础(2.4)
文章目录 2.3 TCP协议2.3.10 拥塞控制2.3.11 延迟应答2.3.12 捎带应答2.3.13 面向字节流2.3.14 粘包问题2.3.15 TCP异常情况2.3.16 TCP小结2.3.17 基于TCP应用层协议 2.3 TCP协议 2.3.10 拥塞控制 虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚…...
SPI接口DAC设备驱动与应用程序开发
本文章相关专栏往期内容,SPI子系统专栏: SPI通信协议与Linux设备驱动框架解析SPI传输与驱动框架的实现spidev.c:SPI设备驱动的核心实现逻辑 PCI/PCIe子系统专栏: 专栏地址:PCI/PCIe子系统PCIe设备MSI/MSI-X中断源码分析…...
第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解
题面链接Htlang/2025lqb_python_b 个人觉得今年这套题整体比往年要简单许多,但是G题想简单了出大问题,预估50101015120860,道阻且长,再接再厉 代码仅供学习参考,满分为赛后洛谷中的测评,蓝桥杯官方测评待…...
数据库的种类及常见类型
一,数据库的种类 最常见的数据库类型分为两种,关系型数据库和非关系型数据库。 二,关系型数据库介绍 生产环境主流的关系型数据库有 Oracle、SQL Server、MySQL/MariaDB等。 关系型数据库在存储数据时实际就是采用的一张二维表࿰…...
vue文件预览docx-preview
1、在项目中引入插件docx-preview npm i docx-preview 此插件依赖jszip,所以还要下载jszip:npm i jszip 2、点击在线预览按钮请求接口获取文件流 const blob new Blob([resp.data]) const url URL.createObjectURL(blob);//浏览器本地存储不能直接…...
旧版 VMware 虚拟机迁移至 KVM 平台-案例2
项目背景 需将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,具体要求如下: 格式转换:将 VMDK 转换为 QCOW2 格式。磁盘扩容:将原 40GB 磁盘扩展至 60GB。密码重置:修改 aiden 用户…...
若依代码生成器原理velocity模板引擎(自用)
1.源码分析 代码生成器:导入表结构(预览、编辑、删除、同步)、生成前后端代码 代码生成器表结构说明: 若依提供了两张核心表来存储导入的业务表信息: gen_table:存储业务表的基本信息 ,它对应于配置代码基本信息和生成信息的页…...
OpenCV直方图均衡化全面解析:从灰度到彩色图像的增强技术
目录 一、直方图均衡化基础:原理与核心思想 二、彩色图像的直方图均衡化:挑战与解决方案 三、进阶技巧与注意事项 四、应用场景与典型案 一、直方图均衡化基础:原理与核心思想 1. 直方图的本质与作用 直方图是图像像素强度分布的统计图表…...
【Pandas】pandas DataFrame keys
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
Web前端之Vue+Element实现表格动态复杂的合并行功能、localeCompare、forEach、table、push、sort、Map
MENU 效果图公共数据数据未排序时(需要合并的行数据未处于相邻位置)固定合并行方法(写死)动态合并行,行数计算方法当太合并行,合并方法方法(函数)执行 效果图 公共数据 Html <e…...
【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】
文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup,目的是为了进一步提…...
嵌入式进阶:如何选择合适的开发平台?
随着现代工业、物联网以及人工智能技术的迅速发展,嵌入式系统已经由简单的控制器向复杂的高性能系统迈进。从传统家电到智能机器人、从自动驾驶汽车到工业自动化,每一项应用都对嵌入式系统的响应速度、运行稳定性和能耗管理提出了更高要求。在这种背景下…...
【HTML】动态背景效果前端页面
下面是一个带有多种动态背景效果的现代化前端页面,包含粒子效果、渐变波浪和星空背景三种可选动态背景。直接上代码!! <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&quo…...
酶动力学参数预测,瓶颈识别……中科院深圳先进技术研究院罗小舟分享AI在酶领域的创新应用
蛋白质,作为生命的基石,在生命活动中发挥着关键作用,其结构和功能的研究,对创新药物研发、合成生物学、酶制剂生产等领域,有着极其重要的意义。但传统蛋白质设计面临诸多难题,蛋白质结构复杂,序…...
【Redis】布隆过滤器应对缓存穿透的go调用实现
布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用: 判断一个元素是不是在集合中 工作原理: 一个位数组(bit array),初始全为0。多个哈希函数,运算输入,从而映射到位数…...
【LLM】解锁Agent协作:深入了解谷歌 A2A 协议与 Python 实现
人工智能(AI)智能体正迅速成为企业提高生产力、自动化工作流程和增强运营能力的关键工具。从处理日常重复性任务到协助复杂的决策,智能体的潜力巨大。然而,当这些智能体来自不同的供应商、使用不同的框架或被限制在孤立的数据系统…...
kafka4.0浅尝辄止
最近工作中接触消息队列比较多,前几周又看到kafka4.0发布,故写一篇博客对消息队列做一个复盘。 目录 消息队列对比1. Apache Kafka 4.02. RabbitMQ3. RocketMQ4. ActiveMQ5. Apache Pulsar6. NSQ kafka4.0鲜明的新特性Java 版本要求升级API 更新与精简移…...
数据库原理及应用mysql版陈业斌实验三
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验三多表查询 1.实验数据如下 student 表(学生表&#…...
OpenHarmony - 小型系统内核(LiteOS-A)(二)
OpenHarmony - 小型系统内核(LiteOS-A)(二) 三、基础内核 3.1、中断及异常处理 基本概念 中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须…...
数字化引擎再升级:小匠物联十周年庆典与全链路创新实践
4月11日,浙江宁波的小匠物联十周年庆典拉开帷幕。本次活动以“拾阶而上,智创未来”为主题,从全员签到、心愿书写,到董事长致辞、切蛋糕及全体合影,每一个环节都精心设计,展现出企业在家用物联网领域的卓越技…...
机器学习核心知识:从基础概念到关键算法
摘要 本文深度剖析机器学习知识体系,从基本概念、学习方式,到分类算法、逻辑回归等关键内容均有涉及。详细阐述各知识点原理与应用场景,并对比多种算法的优劣。 关键词:机器学习;监督学习;分类算法&#x…...
开发工具-jetbrains使用技巧
更详细的可以看 狂神说Java】JavaWeb入门到实战 p6 idea中maven的操作 可以设置怎么调试 然后还可以wsl、远程方式等运行 maven 这里的相当于cmd的操作 命令行去执行这些东西...
HarmonyOS:页面滚动时标题悬浮、背景渐变
一、需求场景 进入到app首页或者分页列表首页时,随着页面滚动,分类tab要求固定悬浮在顶部。进入到app首页、者分页列表首页、商品详情页时,页面滚动时,顶部导航栏(菜单、标题)背景渐变。 二、相关技术知识点…...
Python——Matplotlib库的练习
1、 import matplotlib.pyplot as plt import numpy as npx np.linspace(0,2*np.pi,100) y1 np.sin(x) y2 np.cos(x)plt.plot(x,y1,"r--o",linewidth1.5,markersize6) plt.plot(x,y2,"g-s",linewidth2,markersize8)plt.show() 2、 import matplotlib…...
信息系统项目管理师-第十八章-项目绩效域
本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 在整个生命周期过程中,项目管理者需要始终坚持项目管理原则,通过涵盖 10 …...
Windows 操作系统 - Windows 10 磁盘管理无法为 C 盘选择扩展卷
Windows 10 磁盘管理无法为 C 盘选择扩展卷 在 Windows 10 的磁盘管理中,无法为 C 盘选择扩展卷(选项灰色不可用),主要原因是未分配空间没有紧邻 C 盘的右侧 补充:Windows 10 磁盘管理打开方式 1. 按下快捷键【Win …...
[NOIP 2003 普及组] 栈 Java
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new InputStreamReader(System.in));int n Integer.parseInt(br.readLine());int[] dp new int[n 1];dp[0] 1; // 空序列只有一种…...
