目錄
- 一、什么是 lodash
- 二、為什么需要 Lodash
- 三、API 分類
- Array
- Collection
- Date
- Function
- Lang
- Math
- Number
- Object
- String
- Seq
- Util
我們經常在項目里遇到 Lodash 函數的引入,如:
- debounce(Function)
- cloneDeep(Lang)
- isNull(Lang)
- isUndefined(Lang)
- isNil(Lang)
- isEqual(Lang)
- range(Util)
- uniqBy(Array)
- compact(Array)
- flattenDeep(Array)
- truncate(String)
- omit, pick(Object)
- merge(Object)
- partition(Collection)
一、什么是 lodash
A modern JavaScript utility library delivering modularity, performance & extras.
Lodash 是一個 JavaScript 實用工具庫,提供了許多常用的函數方法,用于簡化 JavaScript 編程中的常見任務。它提供了對數組、集合、對象、函數、字符串等數據類型的操作和處理方法,以及一些實用的輔助函數。
主要特點包括:
- 高性能: Lodash 專注于性能優化,其方法實現都經過了精心設計和測試,以保證在各種環境下都能提供高效的性能。
- 跨瀏覽器兼容性: Lodash 提供了對于不同瀏覽器和 JavaScript 運行環境的兼容支持,可以在各種瀏覽器和環境中安全使用。
- 模塊化: Lodash 的模塊化設計使得你可以按需引入所需的方法,而不必一次性引入整個庫。這有助于減小項目的體積,并提高應用程序的性能。
- 社區活躍: Lodash 擁有龐大的用戶群體和活躍的社區支持,你可以在社區中獲得豐富的資源、文檔和示例。
二、為什么需要 Lodash
之前有人提過:You-Dont-Need-Lodash-Underscore。理由是隨著 ECMAScript 發展,很多語言特性已經能夠實現原生支持,當不需要兼容較早的瀏覽器,其實可以不引入 Lodash 或 underscore。
但是,Lodash 支持非常多性能提升明顯和兼容性更優的特性。甚至,ECMAScript 語言標準也在某種程度上向 Lodash 實現靠近。
Lodash makes JavaScript easier by taking the hassle out of working with arrays, numbers, objects, strings, etc.
Lodash’s modular methods are great for:
- Iterating arrays, objects, & strings
- Manipulating & testing values
- Creating composite functions
因此,Lodash API 的底層實現也非常值得開發者去學習。
三、API 分類
Array
這些函數用于對數組進行操作和處理,包括對數組的遍歷、篩選、映射、合并、排序等操作。例如 .map()、.filter()、.reduce()、.concat()、_.sortBy() 等。
Collection
這些函數用于對集合數據進行操作,包括對象、數組和類數組對象等,它們提供了對集合中的元素進行遍歷、篩選、映射等操作。例如 .forEach()、.groupBy()、_.countBy() 等。
Date
這些函數用于處理日期和時間,包括獲取當前時間、格式化日期、比較日期、添加或減去時間等操作。例如 .now()、.format()、.isEqual()、.add()、_.subtract() 等。
Function
這些函數用于對函數進行操作和處理,包括函數的柯里化、節流、防抖、組合等操作。例如 .curry()、.throttle()、.debounce()、.flow() 等。
Lang
這些函數用于對基本數據類型和語言特性進行操作和判斷,例如判斷數據類型、比較值相等性、生成唯一 ID 等操作。例如 .isArray()、.isEqual() 等。
Math
這些函數用于數學運算和處理,包括計算數組中的最大值、最小值、求和、平均值等操作。例如 .max()、.min()、.sum()、.mean() 等。
Number
這些函數用于處理數字類型的數據,包括數字的格式化、范圍限制、四舍五入、精度處理等操作。例如 .toNumber()、.clamp()、.round()、.roundTo() 等。
Object
這些函數用于對對象進行操作和處理,包括對象的克隆、合并、轉換、遍歷等操作。例如 .clone()、.merge()、.pick()、.mapValues() 等。
String
這些函數用于處理字符串,包括字符串的格式化、拆分、連接、截取、大小寫轉換等操作。例如 .trim()、.split()、.join()、.truncate()、_.lowerCase() 等。
Seq
這些函數用于創建鏈式調用的序列,允許對集合進行一系列的鏈式操作,例如映射、過濾、排序等操作。它們提供了鏈式調用的方式來處理數據,使得代碼更加清晰和易于理解。例如 _.chain()
Util
這些函數提供了一些實用的工具函數,用于輔助開發者進行調試、性能優化等操作。例如 .times()、.noop()、_.uniqueId() 等。