Lodash 是強大的 JavaScript 工具庫,_.chain 支持流式鏈式調用,配合 .value() 終結計算,讓數組/對象操作代碼更具可讀性與表達力。
var _ = require('lodash');
var result = _(data) // 隱式鏈式,或 _.chain(data) 顯式
.filter(...)
.map(...)
.uniq(...)
.value(); // 必須調用 value() 獲取最終結果
var users = [
{ name: 'zhangsan', height: 180, weight: 120 },
{ name: 'lisi', height: 180, weight: 130 },
{ name: 'zhangsan', height: 180, weight: 131 }
];
var result = _.chain(users)
.filter({ name: 'zhangsan' }) // 篩選姓名為 zhangsan
.uniq('name') // 按 name 去重(Lodash 3.x 語法,4.x 用 uniqBy)
.pluck('weight') // 提取 weight 字段(4.x 用 map('weight'))
.value();
console.log(result); // [120, 131]

| 分類 | 方法 | 說明 |
|---|---|---|
| 篩選 | filter, reject, find, findIndex | 條件篩選/查找 |
| 轉換 | map, pluck, mapValues, flatMap | 數據結構轉換 |
| 聚合 | groupBy, countBy, keyBy, reduce | 分組/統計/歸約 |
| 去重 | uniq, uniqBy, uniqWith | 多種去重策略 |
| 排序 | sortBy, orderBy | 單/多字段排序 |
| 切片 | take, drop, slice, chunk | 數組切片分塊 |
_(arr):隱式鏈式,調用方法時自動解包,.value() 終結_.chain(arr):顯式鏈式,需手動 .value(),適合調試中間狀態ES6+ 原生方法已覆蓋大部分需求:
// 原生等價寫法
const result = users
.filter(u => u.name === 'zhangsan')
.reduce((acc, u) => {
if (!acc.names.has(u.name)) {
acc.names.add(u.name);
acc.weights.push(u.weight);
}
return acc;
}, { names: new Set(), weights: [] })
.weights;
但 Lodash 在深層對象操作、函數式工具、跨瀏覽器一致性上仍有優勢。
Lodash 鏈式調用讓數據處理邏輯如同管道流般清晰。掌握核心 API、理解 .value() 終結機制、結合現代 JS 特性選型,能寫出既優雅又高效的代碼。