Skip to content

参考

lodash-es 常用方法、关键 API 形态、变异性与原生平替速查。版本基线 Lodash 4.18.1。冷门方法见官方文档

一、方法分类总览

Lodash 官方按以下 category 组织方法(注意:没有 Promise/异步分类):

分类代表方法
ArraychunkcompactdifferenceflattenflattenDeepuniquniqBypullzip
CollectionmapfilterfindreducegroupBykeyBysortByorderBycountByeverysome
Functiondebouncethrottlememoizeoncecurrypartialbindafterbefore
LangcloneDeepcloneDeepWithisEqualisEmptyisNilisArrayisObjecttoArray
MathaddmaxminmeansumsumBy
NumberclampinRangerandom
ObjectgetsethaspickomitmergemergeWithdefaultsdefaultsDeepkeysvalues
Seqchainvalue(链式相关)
StringcamelCasekebabCasecapitalizetrimescapetemplate
UtilidentityconstantnooprangetimesuniqueId

二、按需引入写法

js
// ✅ 推荐:具名导入(tree-shaking)
import { debounce, cloneDeep, get } from "lodash-es";

// ✅ 子路径直达(更显式)
import cloneDeep from "lodash-es/cloneDeep.js";

// ❌ 避免:整体导入 CJS lodash(不可摇树)
import _ from "lodash";

// ❌ 避免:per-method 包(重复内联依赖,v5 将移除)
// import debounce from 'lodash.debounce'

三、高频方法 API 形态

方法签名要点
cloneDeepcloneDeep(value)递归深拷贝;保留函数(按引用)、处理循环引用
cloneDeepWithcloneDeepWith(value, customizer)customizer 返回非 undefined 则接管该节点克隆
isEqualisEqual(a, b)SameValueZero 深比较;isEqual(NaN,NaN)===true
getget(obj, path, [default])path 支持 'a[0].b'['a',0,'b'];中途为空返回 default
setset(obj, path, value)⚠️ 变异 obj;自动创建缺失中间结构
mergemerge(dest, ...sources)⚠️ 变异 dest;递归深合并(数组按索引合并)
defaultsdefaults(obj, ...sources)⚠️ 变异 obj;只补缺失值(浅)
defaultsDeepdefaultsDeep(obj, ...sources)⚠️ 变异 obj;只补缺失值(深)
pick / omitpick(obj, paths) / omit(obj, paths)返回新对象(白/黑名单)
groupBygroupBy(coll, iteratee)每个 key → 数组
keyBykeyBy(coll, iteratee)每个 key → 单值(保留最后一个)
orderByorderBy(coll, iteratees, orders)多键 + 各自 'asc'/'desc'
uniqByuniqBy(array, iteratee)按 iteratee 判定值去重
chunkchunk(array, [size=1])切成长度 size 的小数组
debouncedebounce(fn, [wait=0], [opts])opts: leading/trailing/maxWait;返回带 cancel/flush
throttlethrottle(fn, [wait=0], [opts])每周期最多一次;默认首尾都触发
memoizememoize(fn, [resolver])⚠️ 默认只用首参当 key;缓存永不淘汰;.cache 可操作
currycurry(fn, [arity])分批传参;支持占位符 _
flow / flowRightflow([fns]) / flowRight([fns])左→右 / 右→左组合

四、变异性速查(是否修改入参)

会变异入参 ⚠️返回新值 ✅
setunsetupdategethas
mergemergeWithcloneDeepclone
assignassignInpickomit
defaultsdefaultsDeepmapValuesmapKeys
pullremovefillreversefiltermapuniqflatten

不可变更新(Redux/React state)请用 lodash/fp 的不可变版本、cloneDeep 后再改、或 immer。

五、原生平替对照

需求Lodash原生(ES2023+)建议
映射/过滤/查找map/filter/findArray.prototype.*用原生
扁平化flatten/flattenDeepflat()/flat(Infinity)用原生
去重(原始值)uniq[...new Set(arr)]用原生
静态路径取值get?. + ??用原生
深拷贝(纯数据)cloneDeepstructuredClone看是否含函数
深合并 / 深比较merge / isEqual用 Lodash
防抖 / 节流debounce / throttle用 Lodash
动态路径取值/设值get / set用 Lodash

六、TypeScript 与生态

bash
pnpm add lodash-es
pnpm add -D @types/lodash-es   # lodash-es 不内置类型,依赖 @types/lodash
模块格式自带 TS 类型定位
lodashCJS(不可摇树)否(需 @types/lodash)经典、最广泛
lodash-esESM(可摇树)否(需 @types/lodash-es)Lodash 的 ESM 形态
lodash/fp不可变 + 柯里化 + data-last
es-toolkitESM是(原生)更小更快的现代替代,含 compat

速查完毕,回 指南 · 基础 理解机制,或 指南 · 进阶 看 debounce/memoize/flow 实战。