lodash库介绍(一个现代JavaScript实用工具库,提供模块化、性能优化和额外功能)JavaScript库(防抖、节流、函数柯里化)JS库

https://www.lodashjs.com/

文章目录

  • Lodash库全解析
    • 简介
    • 核心优势
      • 一致性API
      • 模块化设计
      • 性能优化
    • 常用功能分类
      • 数组操作
      • 对象操作
      • 函数增强
    • 高级应用场景
      • 数据转换链
      • 函数组合
    • 性能考量
      • 大数据集处理
    • 最佳实践
      • 按需引入
      • 利用FP模块
    • 结语

Lodash库全解析

简介

Lodash是一个现代JavaScript实用工具库,提供模块化、性能优化和额外功能,使JavaScript编程更加简单高效。该库包含200多个函数,涵盖数组、对象、函数、字符串等多种数据类型的处理。

核心优势

一致性API

Lodash提供一致且可预测的API,跨浏览器兼容性强,减少开发者处理各种边缘情况的时间。

模块化设计

可按需引入需要的函数,减小打包体积:

// 完整引入
import _ from 'lodash';// 按需引入
import map from 'lodash/map';
import filter from 'lodash/filter';

性能优化

内部实现经过精心优化,特别是在处理大型数据集时表现卓越。

常用功能分类

数组操作

数组处理是Lodash的强项之一,提供丰富的工具函数:

// 数组去重
_.uniq([1, 2, 1, 3, 1]); // => [1, 2, 3]// 数组交集
_.intersection([1, 2], [2, 3]); // => [2]// 数组差集
_.difference([1, 2, 3], [2, 3, 4]); // => [1]

对象操作

简化对象的操作和转换:

// 深度克隆
const original = { a: 1, b: { c: 2 } };
const copy = _.cloneDeep(original);// 合并对象
_.merge({ a: 1 }, { b: 2 }, { c: 3 }); // => { a: 1, b: 2, c: 3 }// 挑选属性
_.pick({ a: 1, b: 2, c: 3 }, ['a', 'c']); // => { a: 1, c: 3 }

函数增强

提供函数式编程支持:

// 防抖
const debouncedFn = _.debounce(() => console.log('触发'), 300);// 节流
const throttledFn = _.throttle(() => console.log('触发'), 300);// 函数柯里化
const greet = (greeting, name) => `${greeting}, ${name}!`;
const sayHello = _.curry(greet)('你好');
sayHello('世界'); // => "你好, 世界!"

高级应用场景

数据转换链

链式操作可以流畅地处理复杂数据转换:

const users = [{ id: 1, name: '张三', active: true },{ id: 2, name: '李四', active: false },{ id: 3, name: '王五', active: true }
];const activeNames = _.chain(users).filter('active').map('name').map(name => `活跃用户: ${name}`).value();
// => ["活跃用户: 张三", "活跃用户: 王五"]

函数组合

通过函数组合创建新功能:

const getActiveUserNames = _.flow([users => _.filter(users, 'active'),users => _.map(users, 'name')
]);getActiveUserNames(users); // => ["张三", "王五"]

性能考量

大数据集处理

处理大型数据集时,Lodash的优化显著提升性能:

// 处理大型数组
const largeArray = Array.from({ length: 10000 }, (_, i) => i);// 原生方式
console.time('原生');
const nativeResult = largeArray.filter(n => n % 2 === 0).map(n => n * 2);
console.timeEnd('原生');// Lodash方式
console.time('Lodash');
const lodashResult = _.chain(largeArray).filter(n => n % 2 === 0).map(n => n * 2).value();
console.timeEnd('Lodash');

最佳实践

按需引入

生产环境应当使用按需引入方式,减小打包体积:

// 不推荐
import _ from 'lodash';// 推荐
import map from 'lodash/map';
import filter from 'lodash/filter';

利用FP模块

函数式编程爱好者可使用Lodash/FP模块:

import fp from 'lodash/fp';// 数据后置,便于函数组合
const result = fp.flow(fp.filter(x => x % 2 === 0),fp.map(x => x * 2)
)([1, 2, 3, 4]);
// => [4, 8]

结语

Lodash通过提供丰富的工具函数,极大地简化了JavaScript开发工作。合理使用Lodash可以使代码更加简洁、可读性更强,同时避免重复造轮子,提高开发效率。

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

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

相关文章

Spring MVC 国际化机制详解(MessageSource 接口体系)

Spring MVC 国际化机制详解(MessageSource 接口体系) 1. 核心接口与实现类详解 接口/类名描述功能特性适用场景MessageSource核心接口,定义消息解析能力支持参数化消息(如{0}占位符)所有国际化场景的基础接口Resource…

PyTorch张量范数计算终极指南:从基础到高阶实战

在深度学习领域,张量范数计算是模型正则化、梯度裁剪、特征归一化的核心技术。本文将以20代码实例,深度剖析torch.norm的9大核心用法,并揭示其在Transformer模型中的关键应用场景。 🚀 快速入门(5分钟掌握核心操作&…

荣耀90 GT信息

外观设计 屏幕:采用 6.7 英寸 AMOLED 荣耀绿洲护眼屏,超窄边框设计,其上边框 1.6mm,左右黑边 1.25mm,屏占较高,带来更广阔的视觉体验。屏幕还支持 120Hz 自由刷新率,可根据使用场景自动切换刷新…

【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】

文章内容: 自定义实现枚举enum关键字实现枚举 ❤️内容涉及枚举的定义,快速入门,注意事项和小题巩固知识点 🌈 跟着B站一位老师学习的内部类内容,现写这篇文章为学习内部类的小伙伴提供思路支持,希望可以一…

局域网访问 Redis 方法

局域网访问 Redis 方法 默认情况下,Redis 只允许本机 (127.0.0.1) 访问。如果你想让局域网中的其他设备访问 Redis,需要 修改 Redis 配置,并确保 防火墙放行端口。 方法 1:修改 Redis 配置 1. 修改 redis.conf(或 me…

如何应对客户频繁变更需求

如何应对客户频繁变更需求?要点包括: 快速响应、深入沟通、灵活规划、过程记录、风险管控。这些策略既能降低项目失控风险,也能帮助团队在变动环境中保持高效率。其中深入沟通尤为关键,它不仅能够让团队第一时间了解客户意图&…

Set 集合

默认情况下, Scala 使用的是不可变集合, 如果你想使用可变集合, 需要引用 scala.collection.mutable.Set Set 默认是不可变集合,数据无序 数据不可重复 遍历集合 创建可变集合 mutable.Set 打印集合 集合添加元素 向集合中…

最新 OpenHarmony 系统一二级目录整理

我们在学习 OpenHarmony 的时候,如果对系统的目录结构了解,那么无疑会提升自己对 OpenHarmony 更深层次的认识。 于是就有了今天的整理。 首先在此之前,我们要获取源码 获取源码的方式 OpenHarmony 主干代码获取 方式一(推荐&am…

STL常用容器整理

STL常用容器操作整理 STL常用容器操作整理(string/vector/set/map)一、string(字符串)构造函数元素访问修改操作容量操作子串与查找 二、vector(动态数组)构造函数元素访问修改操作容量操作 三、set&#x…

Unity 实现伤害跳字

核心组件: Dotween TextMeshPro 过程轨迹如下图: 代码如下: using System.Collections; using System.Collections.Generic; using DG.Tweening; using TMPro; using UnityEngine; using UnityEngine.Pool;public class …

Ubuntu 22.04 AI大模型环境配置及常用工具安装

一、基础环境准备 1.1 系统准备 建议使用 Ubuntu22.04 以下配置皆以 Ubuntu22.04 系统版本为例 1.2 安装git apt-get update && apt-get install git -y1.3 安装 Python 3.9 【建议安装 3.10】(安装miniconda或者conda来管理虚拟环境) wget …

STM32单片机入门学习——第27节: [9-3] USART串口发送串口发送+接收

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.08 STM32开发板学习——第27节: [9-3] USART串口发送&串口发送接收 前言开发板说…

前端实现docx格式word文件预览,可以兼容原生、vue2、以及uni-app 项目,详细步骤。

上一篇记录了PDF文件预览功能。这一篇记录下docx文件预览。 核心文件 doc.html <script src"./build/polyfill.min.js"></script> <script src"./build/jszip.min.js"></script> <script src"./build/docx-preview.js&…

Java中的ArrayList方法

1. 创建 ArrayList 实例 你可以通过多种方式创建 ArrayList 实例&#xff1a; <JAVA> ArrayList<String> list new ArrayList<>(); // 创建一个空的 ArrayList ArrayList<String> list new ArrayList<>(10); // 创建容量为 10 的 ArrayList …

【anaconda下py】

38 https://repo.anaconda.com/archive/Anaconda3-2020.11-Windows-x86.exe 39 https://repo.anaconda.com/archive/Anaconda3-2022.10-Windows-x86_64.exe 310https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Windows-x86_64.exe 历史列表Index of /archive 远程&…

linux--------------进程控制(下)

一、进程等待 1.1 进程等待必要性 子进程退出后&#xff0c;若父进程不管不顾&#xff0c;可能会产生 “僵尸进程”&#xff0c;进而造成内存泄漏。进程一旦变为僵尸状态&#xff0c;即使使用 kill -9 也无法将其杀死&#xff0c;因为无法杀死一个已死的进程。父进程需要了解…

docker 中跑faster-whisper 教程(1050显卡)

之前我本地机器运行faster-whisper 会报错类似 Could not load library libcudnn_ops_infer.so.8github 上也有类似的情况 &#xff1a;https://github.com/SYSTRAN/faster-whisper/issues/516#issuecomment-2785038635 缺少.so.8 文件&#xff0c;我通过以下方式&#xff0c;…

人大金仓数据库dum文件进行备份数据和恢复数据

逻辑备份命令: sys_dump -U SYSTEM -d problem_dev -Fc -f /db_backup/kingbase/dump/problem_dev/problem_dev20240329.dmp用户:SYSTEM 数据库名:problem_dev 格式:自定义格式(-Fc) 输出文件:/db_backup/kingbase/dump/problem_dev/problem_dev20240329.dmp sys_dump…

Java的Selenium元素定位-xpath

xpath其实就是一个path(路径)&#xff0c;一个描述页面元素位置信息的路径&#xff0c;相当于元素的坐标xpath基于XML文档树状结构&#xff0c;是XML路径语言&#xff0c;用来查询xml文档中的节点。 绝对定位 从根开始找--/(根目录)/html/body/div[2]/div/form/div[5]/button缺…

python-Leetcode 65.搜索旋转排序数组

题目&#xff1a; 整数数组nums按升序排列&#xff0c;数组中的值互不相同 在传递给函数之前&#xff0c;nums在预先未知的某个小标K上进行了旋转&#xff0c;使数组变为[nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]&#xff0c;小标从0开始计数。…