Skip to content

Lodash - Util (工具)

Lodash 中的 Utility(工具)模块包含了一系列不适合归入 Array、Object 或 String 等其他类别的多样化辅助函数。其中包括 identity 函数、函数组合工具、迭代助手、谓词创建器等。

这些工具函数通常用作构建模块,或为常见的编程模式提供便捷的快捷方式。

方法与语法描述
identity
_.identity(value)
返回接收到的第一个参数。作为默认的迭代器函数(iteratee)非常有用。
constant
_.constant(value)
创建一个函数,该函数始终返回提供给它的同一个值。对于需要总是返回特定常量值的函数很有用。
noop
_.noop()
一个执行空操作并返回 undefined 的函数。可以用作默认的回调函数或占位符。
times
.times(n, [iteratee=.identity])
调用 iteratee 函数 n 次,并返回每次调用的结果组成的数组。iteratee 函数会接收一个参数:索引(index)。
uniqueId
_.uniqueId([prefix=”])
生成一个唯一 ID。如果提供了 prefix,则 ID 会附加在其后。生成临时的 DOM ID 或键(keys)时很有用。
range
_.range([start=0], end, [step=1])
创建一个从 start(包括)到 end(不包括)的数字数组(可正可负)。step 决定了增量/减量。
rangeRight
_.rangeRight([start=0], end, [step=1])
类似于 _.range,但生成的是降序排列的数字。
defaultTo
_.defaultTo(value, defaultValue)
检查 value 以确定是否应返回其默认值。如果 value 是 NaN、null 或 undefined,则返回默认值。类似于原生的 Nullish Coalescing Operator (??),但 ?? 只对 null 或 undefined 生效。
iteratee
.iteratee([func=.identity])
创建一个函数,该函数执行 iteratee 风格的简写检查(字符串、对象、数组)。Lodash 许多方法内部都使用它,但也可以用于创建可重用的谓词函数(predicate functions)。
matches
_.matches(source)
创建一个函数,该函数对给定对象与 source 进行部分深层比较,如果给定对象包含对应的属性值则返回 true,否则返回 false。
matchesProperty
_.matchesProperty(path, srcValue)
创建一个函数,该函数比较给定对象 path 路径上的值与 srcValue。
property
_.property(path)
创建一个函数,该函数返回给定对象 path 路径上的值。
propertyOf
_.propertyOf(object)
_.property 的反向操作。创建一个函数,该函数返回给定 object 在指定路径上的值。
flow
_.flow([funcs])
创建一个函数,该函数按从左到右的顺序调用给定的函数,其中每个后续调用都以前一个函数的返回值作为参数。
flowRight
_.flowRight([funcs])
类似于 _.flow,但按从右到左的顺序调用函数(函数组合)。
cond
_.cond(pairs)
创建一个函数,该函数遍历 pairs 数组,并调用第一个返回 truthy 结果的谓词所对应的函数。每个 pair 都是 [predicate, transform] 形式。
over
.over([iteratees=[.identity]])
创建一个函数,该函数使用接收到的参数调用 iteratees 数组中的所有函数,并返回它们的结果。
overEvery
.overEvery([predicates=[.identity]])
创建一个函数,该函数检查当使用接收到的参数调用时,所有谓词是否都返回 truthy。
overSome
.overSome([predicates=[.identity]])
创建一个函数,该函数检查当使用接收到的参数调用时,任一谓词是否返回 truthy。
mixin
_.mixin([object=lodash], source, [options={}])
将源函数添加到目标 object。如果 object 是 Lodash wrapper,则这些方法会被添加为可链式调用的工具方法。用于扩展 Lodash 的高级用法。
noConflict
_.noConflict()
将全局 _ 变量恢复到之前的值,并返回 Lodash 函数的引用。在多个库可能占用全局 _ 变量的环境中很有用。
stubFalse / stubTrue / stubArray / stubObject / stubString分别返回 false、true、[]、{} 或 '' 的函数。可用作默认值或在测试中使用。
import _ from 'lodash-es';
const users = [
{ id: 1, name: 'Alice', active: false, age: 30 },
{ id: 2, name: 'Bob', active: true, age: 25 },
{ id: 3, name: 'Charlie', active: true, age: 35 }
];
// 使用简写方式创建的谓词
const isActive = _.matchesProperty('active', true);
const isOver30 = (user) => _.get(user, 'age', 0) > 30;
// 使用 _.overEvery 查找年龄大于 30 的活跃用户
const isActiveAndOver30 = _.overEvery([isActive, isOver30]);
const targetUsers = _.filter(users, isActiveAndOver30);
// targetUsers: [{ id: 3, name: 'Charlie', active: true, age: 35 }]
// 使用 _.flow 进行顺序操作的示例
const getActiveUserNames = _.flow([
(arr) => _.filter(arr, isActive), // 过滤活跃用户
(arr) => _.map(arr, 'name'), // 获取他们的名字
(arr) => arr.sort() // 按字母顺序排序名字
]);
const activeNames = getActiveUserNames(users);
// activeNames: ['Bob', 'Charlie']
// 生成 5 个以 'item_' 为前缀的唯一 ID
const itemIds = _.times(5, () => _.uniqueId('item_'));
// itemIds: ['item_1', 'item_2', 'item_3', 'item_4', 'item_5'] (IDs might vary)
console.log('Active users over 30:', targetUsers);
console.log('Sorted active user names:', activeNames);
console.log('Generated Item IDs:', itemIds);

Lodash 工具方法提供了灵活的工具,可以简洁地创建谓词、组合函数、生成数据以及处理常见的编程任务。