Lodash-es 完整開發指南:ES模塊化JavaScript工具庫實戰教程

簡介

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…