简介

Lodash-es 是 Lodash 库的 ES 模块版本,提供了大量实用的 JavaScript 工具函数。它支持按需导入,可以显著减少打包体积,是现代 JavaScript 项目中的首选工具库。

主要特性

  • ES 模块支持: 完全支持 ES6 模块语法
  • 按需导入: 只导入需要的函数,减少打包体积
  • TypeScript 支持: 完整的类型定义
  • 函数式编程: 提供丰富的函数式编程工具
  • 性能优化: 经过优化的实现,性能优异

安装配置

安装依赖

# 安装 lodash-es
npm install lodash-es# 安装类型定义(TypeScript 项目)
npm install @types/lodash-es -D

基础导入

// 按需导入单个函数
import { debounce, throttle, cloneDeep } from "lodash-es";// 导入多个函数
import { isEmpty, isArray, isObject, merge, pick } from "lodash-es";

常用方法

1. 数组操作

import { chunk, flatten, uniq, groupBy, orderBy } from "lodash-es";// 数组分块
const numbers = [1, 2, 3, 4, 5, 6];
const chunks = chunk(numbers, 2); // [[1, 2], [3, 4], [5, 6]]// 数组扁平化
const nested = [1, [2, [3, [4]]]];
const flattened = flatten(nested); // [1, 2, [3, [4]]]// 去重
const duplicates = [1, 2, 2, 3, 3, 3];
const unique = uniq(duplicates); // [1, 2, 3]// 分组
const users = [{ name: "Alice", age: 25 },{ name: "Bob", age: 30 },{ name: "Charlie", age: 25 },
];
const grouped = groupBy(users, "age");
// { 25: [{ name: 'Alice', age: 25 }, { name: 'Charlie', age: 25 }], 30: [{ name: 'Bob', age: 30 }] }// 排序
const sorted = orderBy(users, ["age"], ["desc"]); // 按年龄降序

2. 对象操作

import { pick, omit, merge, cloneDeep, isEmpty } from "lodash-es";const user = {id: 1,name: "John",email: "john@example.com",password: "secret",
};// 选择属性
const publicUser = pick(user, ["id", "name", "email"]);// 排除属性
const safeUser = omit(user, ["password"]);// 深度合并
const defaultConfig = { theme: "light", lang: "en" };
const userConfig = { theme: "dark" };
const merged = merge({}, defaultConfig, userConfig); // { theme: 'dark', lang: 'en' }// 深度克隆
const cloned = cloneDeep(user);// 检查空值
const empty = isEmpty({}); // true
const notEmpty = isEmpty([1, 2, 3]); // false

3. 函数工具

import { debounce, throttle, once, memoize } from "lodash-es";// 防抖
const debouncedSearch = debounce((query) => {console.log("搜索:", query);
}, 300);// 节流
const throttledScroll = throttle(() => {console.log("滚动事件");
}, 100);// 只执行一次
const initialize = once(() => {console.log("初始化完成");
});// 缓存函数结果
const expensiveCalculation = memoize((n) => {console.log("计算中...");return n * n;
});

4. 类型检查

import { isArray, isObject, isString, isNumber, isFunction } from "lodash-es";console.log(isArray([1, 2, 3])); // true
console.log(isObject({})); // true
console.log(isString("hello")); // true
console.log(isNumber(42)); // true
console.log(isFunction(() => {})); // true

实际应用示例

1. 搜索功能

import { debounce, filter, includes } from "lodash-es";class SearchComponent {constructor() {this.data = [{ id: 1, name: "Apple", category: "fruit" },{ id: 2, name: "Banana", category: "fruit" },{ id: 3, name: "Carrot", category: "vegetable" },];this.search = debounce(this.performSearch.bind(this), 300);}performSearch(query) {if (!query) return this.data;return filter(this.data, (item) =>includes(item.name.toLowerCase(), query.toLowerCase()));}
}

2. 表单验证

import { isEmpty, isEmail, pick } from "lodash-es";const validateForm = (formData) => {const errors = {};if (isEmpty(formData.name)) {errors.name = "姓名不能为空";}if (!isEmail(formData.email)) {errors.email = "邮箱格式不正确";}return {isValid: isEmpty(errors),errors,cleanData: pick(formData, ["name", "email"]),};
};

最佳实践

1. 按需导入

// ✅ 推荐:按需导入
import { debounce, throttle } from "lodash-es";// ❌ 不推荐:导入整个库
import _ from "lodash-es";

2. 与 Vue3 结合使用

import { ref, computed } from "vue";
import { debounce, isEmpty } from "lodash-es";export default {setup() {const searchQuery = ref("");const results = ref([]);const debouncedSearch = debounce(async (query) => {if (isEmpty(query)) {results.value = [];return;}// 执行搜索逻辑}, 300);const filteredResults = computed(() =>results.value.filter((item) => !isEmpty(item)));return {searchQuery,results: filteredResults,debouncedSearch,};},
};

3. 性能优化

import { memoize, throttle } from "lodash-es";// 缓存计算结果
const fibonacci = memoize((n) => {if (n < 2) return n;return fibonacci(n - 1) + fibonacci(n - 2);
});// 限制函数调用频率
const handleResize = throttle(() => {// 处理窗口大小变化
}, 100);

lodash vs lodash-es

特性lodashlodash-es
模块化支持CommonJSES Modules (ESM)
Tree Shaking不支持✅ 支持
打包体积较大较小(按需引入)
兼容性Node.js 和旧浏览器兼容现代浏览器/构建工具
性能(构建优化)较差✅ 更佳(按需优化)

总结

Lodash-es 是现代 JavaScript 开发中不可或缺的工具库。通过按需导入和合理使用,可以显著提升开发效率和代码质量。记住始终使用 ES 模块语法导入,并根据项目需求选择合适的函数,避免不必要的依赖。

 Lodash-es 完整开发指南:ES模块化JavaScript工具库实战教程 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿技术分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96426.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96426.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96426.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

26. AI-Agent-Dify

文章目录前言一、Dify入门为什么使用 Dify&#xff1f;Dify 能做什么&#xff1f;二、Dify私有化部署Docker Compose 部署前提条件克隆 Dify 代码启动 Dify更新 Dify访问 Dify自定义配置三、Dify构建企业级Agent应用定义如何使用智能助手添加助手需要的工具配置 Agent配置对话开…

云原生:微服务与Serverless指南

Copilot时代的开发者效能提升 代码生成与补全&#xff1a;减少重复性编码工作&#xff0c;加快开发速度错误检测与修复&#xff1a;实时提示潜在问题&#xff0c;降低调试时间知识获取与学习&#xff1a;帮助开发者快速掌握新语言或框架协作效率&#xff1a;通过AI辅助减少团队…

SpringBoot + Apache Tika:一站式解决文件数据提取难题

在日常开发中&#xff0c;你是否也遇到过这样的窘境&#xff1a;领导甩来需求“把用户上传的 Word、Excel、PDF 里的关键信息扒出来存库”&#xff0c;你却要对着不同格式逐个攻坚——解析 Word 用 POI 还要处理 .doc/.docx 兼容&#xff0c;解析 Excel 要啃合并单元格、公式计…

车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)

车牌模拟生成器&#xff1a;Python代码实现与商业应用前景引言在智慧城市建设和汽车行业数字化浪潮中&#xff0c;车牌作为车辆的唯一标识&#xff0c;其相关技术应用正变得越来越重要。今天我们将介绍一个基于Python的车牌模拟生成器&#xff0c;探讨其技术实现、功能特点以及…

小程序非主页面的数据动作关联主页面的数据刷新操作

如果在主页面跳转到其他页面。比如说我的收藏页面&#xff0c;然后有取消收藏的动作&#xff0c;当返回到主页面的时候&#xff0c;如果有关联数据显示在主页面&#xff0c;刷新页面对应的状态。 下面的代码是实现&#xff1a;//卡片收藏/取消if (newCollectd) {this.setData({…

后端(fastAPI)学习笔记(CLASS 1):扩展基础

一、python的类型声明1、类型声明的背景和作用python 3.6 版本引入了“类型提示”1、类型提示是一种新的语法&#xff0c;用来声明变量的类型2、提高编译器和工具的支持能力为什么要学习类型提示1、了解类型提示不仅仅对使用FastAPI有帮助&#xff0c;也能提高代码的可读性度和…

2023年系统分析师上半年论文试题分析

试题一 论信息系统的可行性分析信息系统可行性分析的目的是确认在当前条件下企业是否有必要建设新系统&#xff0c;以及建设新系统的工作是否具备必要的条件。如何进行可行性分析是系统分析师所必须面临的问题。请围绕信息系统可行性分析论题&#xff0c;依次从以下三个方面进行…

洛谷 P1967 [NOIP 2013 提高组] 货车运输(kruskal 重构树 + 求路径最小边权)

题目链接 题目难度 洛谷上是蓝题&#xff0c;本人认为评高了&#xff0c;此题思维和实现都不难&#xff0c;应该是绿题。 题目解法概括 kruskal 重构树 倍增优化求路径最小边权 代码 #include <iostream> #include <cstdio> #include <vector> #inclu…

【01】针对开源收银系统icepos (宝塔面板) 详细安装教程详细参考-优雅草卓伊凡

【01】针对开源收银系统icepos (宝塔面板) 详细安装教程详细参考-优雅草卓伊凡引言本文做参考&#xff0c;下篇文章 直接实践&#xff0c;由于已经选型本系统是服务端php开发的系统&#xff0c;他的系统环境如下&#xff1a;系统安装 环境要求ICEPOS对服务器或电脑硬件要求不高…

MySQL的常用命令

目录1. 连接MySQL数据库基本连接语法连接参数说明2. 数据库操作2.1 查看数据库2.2 创建数据库2.3 删除数据库3. 表操作3.1 查看表信息3.2 创建表3.3 常用数据类型3.4 修改表结构3.5 删除表4. 数据操作 (CRUD)4.1 插入数据 (CREATE)4.2 查询数据 (READ)基本查询条件查询排序和分…

Linux: config: CONFIG_CHECKPOINT_RESTORE;CRIU

文章目录 config CHECKPOINT_RESTORE commit related 简介 参考 如何使用 Checkpoint/Restore 功能 步骤 1:确保内核支持 步骤 2:安装 CRIU 步骤 3:检查点(Checkpoint) 步骤 4:恢复(Restore) 步骤 5:验证 常见应用场景 注意事项 python config CHECKPOINT_RESTORE bo…

eclipse怎么把项目设为web

在 Eclipse 中将一个项目设置为 Web 项目&#xff08;或称动态 Web 项目&#xff09;主要有两种场景&#xff1a;​创建新的 Web 项目​ 和 ​将现有项目转换为 Web 项目。我将为你详细讲解这两种方法。前提条件&#xff1a;确保你有必要的 Eclipse 组件在开始之前&#xff0c;…

CVPR 2025|基于视觉语言模型的零样本3D视觉定位

论文信息题目&#xff1a;Zero-Shot 3D Visual Grounding from Vision-Language Models基于视觉语言模型的零样本3D视觉定位作者&#xff1a;Rong Li, Shijie Li, Lingdong Kong, Xulei Yang, Junwei Liang论文创新点提出全新框架&#xff1a;论文提出SeeGround这一无需训练的零…

Realtime API 语音代理端到端接入全流程教程(含 Demo,延迟 280ms)

在现代应用中&#xff0c;实时语音交互已经成为重要功能&#xff0c;而低延迟的语音传输更是用户体验的关键指标。本文将详细介绍如何使用 Realtime API 实现 语音代理 的端到端接入&#xff0c;包括环境搭建、接口调用、低延迟优化及 Demo 演示。通过本教程&#xff0c;开发者…

AI赋能办公:用Python解决发票合并打印难题

一、问题的提出今天网友提问&#xff1a;报销时&#xff0c;财务要求要把发票合并打印&#xff0c;即两张合成一张放在A4纸上&#xff0c;中间还要加一道黑色分界线&#xff0c;如何快速完成数十张发票的打印&#xff1f;问题的提出二、问题分析这个问题可以采用两种方法解决&a…

Shell编程之正则表达式与文本处理工具

一、正则表达式基础1. 正则表达式概述​定义​&#xff1a;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是由普通字符​&#xff08;如字母、数字、标点符号&#xff09;与元字符​&#xff08;具有特殊含义的专用字符&#xff09;组成的字符串…

使用 Spring AI Alibaba Graph 实现工作流

1 依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version> </dependency><dependency><groupId>com.alibaba.cloud.…

碰一碰系统源码于小程序打通技术开发整合方案,驱动AI技术开发源代码

碰一碰系统结合小程序开发数据互通&#xff0c;驱动AI技术开发源代码碰一碰系统作为门店获客技术落地的核心载体&#xff0c;已从标准化产品向实体店定制演进。本文从源码d的形式出发&#xff0c;解析企业级数字人分身系统的交互系统&#xff0c;为技术团队提供可落地的开发指南…

深度学习——自然语言处理NLP

自然语言处理中的词向量技术演进与实践一、传统统计语言模型的困境与突破1.1 统计语言模型的局限性早期NLP主要依赖统计语言模型&#xff0c;如n-gram模型&#xff0c;通过统计词序列的频率来预测语言概率。这类模型存在两个根本缺陷&#xff1a;早期统计语言模型的局限性1. 维…

uni-app头像叠加显示

展示代码<view class"bmBox"><view class"bmLeft">已报名&#xff1a;<text class"blueColor">10人</text></view><view class"bmRight dflex"><view class"avatarList"><ima…