首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

開發工具

lodash

By Kurau·2024-03-27·Updated 2026-05-09·3 分鐘閱讀

Lodash 工具庫

TL;DR
Lodash 提供大量 utility 函式(陣列 / 物件 / debounce / throttle / 深拷貝)。2026 年觀察:多數 method 已被 現代 JS 原生 API 取代(structuredClone / Array.from(new Set()) / 等),只在需要 debounce / throttle 等非原生功能時用。

正確 import(tree-shake 友善)

// ❌ 不推薦:整個包進來(~70KB gzipped)
import _ from 'lodash';
_.debounce(fn, 300);

// ✅ 推薦:單一 method
import debounce from 'lodash/debounce';

// ✅ 或 ESM 版本(原生 tree-shake)
import { debounce } from 'lodash-es';
javascript

lodash-es vs lodash/{method}:

  • lodash-es — ES Modules,Vite / Rollup 自動 tree-shake
  • lodash/debounce — 手動指定單一 method,Webpack / 老 toolchain 也可以

都比 import _ from 'lodash' 小很多。


常用函式 + 原生替代

Lodash用途原生替代(2026)
debounce防抖(搜尋框)❌ 沒原生 → Lodash 仍最佳
throttle節流(滾動)❌ 沒原生 → Lodash 仍最佳
cloneDeep深拷貝✅ structuredClone(obj)
isEqual深比較❌ 沒原生 → Lodash 仍可
get安全取值✅ obj?.a?.b?.c ?? default
groupBy分組✅ Object.groupBy(arr, fn) (ES2024)
uniqBy去重⚠️ Array.from(new Map(arr.map(x => [x.id, x])).values())
flatten攤平✅ arr.flat()
flattenDeep完全攤平✅ arr.flat(Infinity)
chunk切塊❌ 沒原生 → Lodash
merge深合併❌ 沒原生( Object.assign 是淺合併)
2026 年保留 Lodash 的理由
  1. debounce / throttle(原生沒有)
  2. isEqual(深比較,原生 === 是 reference 相等)
  3. merge(深合併)
  4. chunk / partition / countBy / orderBy / sortBy 等 array helpers

純粹的 cloneDeep / get / flatten / groupBy / uniqBy 都已有原生 / 簡單寫法。


debounce 範例(最常用)

import debounce from 'lodash/debounce';

// 搜尋框 debounce
const handleSearch = debounce((query) => {
  fetch(`/api/search?q=${query}`);
}, 500);

// 取消 debounce(unmount 時)
handleSearch.cancel();

// 立即執行 + 取消 pending
handleSearch.flush();
javascript

React 用時要用 useMemo:

import { useMemo } from 'react';
import debounce from 'lodash/debounce';

function Search() {
  const handleSearch = useMemo(
    () => debounce((q) => fetch(`/api?q=${q}`), 500),
    [],
  );

  useEffect(() => () => handleSearch.cancel(), [handleSearch]);

  return <input onChange={(e) => handleSearch(e.target.value)} />;
}
tsx

每次 render 別重建 debounce(否則 timer 重置)。


替代套件(2026 觀察)

套件特色
lodash老牌,沒事用這個
remeda現代 TS-first,API 鏈式 + 型別安全
es-toolkit2024 出,號稱比 lodash 快 5x、體積小
ramdaFP-style,curry / pipe
// es-toolkit
import { debounce, cloneDeep, groupBy } from 'es-toolkit';

// remeda(pipe-friendly)
import { pipe, groupBy, map } from 'remeda';
const result = pipe(
  users,
  groupBy((u) => u.age),
  map((group) => group.length),
);
typescript

2026 年值得試 es-toolkit(在意 bundle size)或 remeda==(TS heavy 專案)。但 lodash 仍是社群最熟的選擇。

目錄

    ◆ 相關文章

    • github 多個帳戶 SSH登入

      2026-05-09
    • github 大小寫問題

      2026-05-09
    • npm --save 到底是什麼 --save-dev 不一樣嗎

      2026-05-09
    • Git教學

      2026-05-09
    ← 上一篇Ladle 前端測試工具下一篇 →github 大小寫問題

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章