Lodash 快速指南
Lodash - 概述
Lodash是一個流行的基於JavaScript的庫,它提供200多個函式來簡化Web開發。它提供諸如map、filter、invoke之類的輔助函式,以及函式繫結、JavaScript模板、深度相等性檢查、建立索引等等。Lodash可以直接在瀏覽器中使用,也可以與Node.js一起使用。
使用JavaScript操作物件可能非常具有挑戰性,特別是如果您需要對它們進行大量操作。Lodash提供了許多功能,可以簡化您對物件的處理。
Lodash是一個開源專案,您可以輕鬆地為該庫貢獻程式碼並新增功能(以外掛的形式),並在GitHub和Node.js上提供。
特性
讓我們詳細瞭解Lodash提供的所有重要特性:
集合
Lodash為集合提供了各種函式,例如each、map、reduce,這些函式用於對集合的每個專案應用操作。它提供了諸如groupBy、countBy、max、min之類的處理集合的方法,簡化了許多工。
陣列
Lodash提供了各種陣列函式,用於迭代和處理陣列,例如first、initial、lastIndexOf、intersection、difference等。
函式
Lodash提供諸如bind、delay、before、after等函式。
物件
Lodash提供用於操作物件、對映物件和比較物件的函式。例如,keys、values、extend、extendOwn、isEqual、isEmpty等。
工具
Lodash提供了各種實用程式方法,例如noConflict、random、iteratee、escape等。
鏈式呼叫
Lodash還提供鏈式呼叫方法,例如chain、value。
在後續章節中,我們將介紹Lodash的重要函式。
Lodash - 環境搭建
在本節中,您將詳細瞭解如何在本地計算機上設定Lodash的工作環境。在開始使用Lodash之前,您需要訪問該庫。您可以透過以下任何一種方法訪問其檔案:
方法一:在瀏覽器中使用Lodash檔案
在這種方法中,我們將從其官方網站獲取Lodash檔案,並直接在瀏覽器中使用它。
步驟一
第一步,訪問Lodash的官方網站 https://lodash.com/。
您可以看到一個下載選項,它提供最新的lodash.min.js檔案,以及可用的CDN副本。點選連結並選擇lodash.min.js的最新連結。
步驟二
現在,在script標籤內包含lodash.min.js,並開始使用Lodash。為此,您可以使用以下程式碼:
<script type = "text/JavaScript" src = "https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"> </script>
這裡給出一個工作示例及其輸出,以便更好地理解:
示例
<html>
<head>
<title>Lodash - Working Example</title>
<script type = "text/JavaScript" src = "https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
<style>
div {
border: solid 1px #ccc;
padding:10px;
font-family: "Segoe UI",Arial,sans-serif;
width: 50%;
}
</style>
</head>
<body>
<div style = "font-size:25px" id = "list"></div>
<script type = "text/JavaScript">
var numbers = [1, 2, 3, 4];
var listOfNumbers = '';
_.each(numbers, function(x) { listOfNumbers += x + ' ' });
document.getElementById("list").innerHTML = listOfNumbers;
</script>
</body>
</html>
輸出
方法二:使用Node.js
如果您選擇此方法,請確保您的系統上已安裝Node.js和npm。您可以使用以下命令安裝Lodash:
npm install lodash
Lodash成功安裝後,您可以看到以下輸出:
+ lodash@4.17.20 added 1 package from 2 contributors and audited 1 package in 2.54s found 0 vulnerabilities
現在,要測試Lodash是否與Node.js正常工作,請建立檔案tester.js並將以下程式碼新增到其中:
var _ = require('lodash');
var numbers = [1, 2, 3, 4];
var listOfNumbers = '';
_.each(numbers, function(x) { listOfNumbers += x + ' ' });
console.log(listOfNumbers);
將上述程式儲存到tester.js中。使用以下命令編譯和執行此程式。
命令
\>node tester.js
輸出
1 2 3 4
Lodash - 陣列
Lodash有很多易於使用的處理陣列的方法。本章將詳細介紹它們。
Lodash 提供了各種處理陣列的方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.chunk(array, [size=1]) |
| 2 |
_.compact(array) |
| 3 |
_.concat(array, [values]) |
| 4 |
_.difference(array, [values]) |
| 5 |
_.differenceBy(array, [values], [iteratee=_.identity]) |
| 6 |
_.differenceWith(array, [values], [comparator]) |
| 7 |
_.drop(array, [n=1]) |
| 8 |
_.dropRight(array, [n=1]) |
| 9 |
_.dropRightWhile(array, [predicate=_.identity]) |
| 10 |
_.dropWhile(array, [predicate=_.identity]) |
| 11 |
_.fill(array, value, [start=0], [end=array.length]) |
| 12 |
_.findIndex(array, [predicate=_.identity], [fromIndex=0]) |
| 13 |
_.findLastIndex(array, [predicate=_.identity], [fromIndex=array.length-1]) |
| 14 |
_.flatten(array) |
| 15 |
_.flattenDeep(array) |
| 16 |
_.flattenDepth(array, [depth=1]) |
| 17 |
_.fromPairs(pairs) |
| 18 |
_.head(array) |
| 19 |
_.indexOf(array, value, [fromIndex=0]) |
| 20 |
_.initial(array) |
| 21 |
_.intersection([arrays]) |
| 22 |
_.intersectionBy([arrays], [iteratee=_.identity]) |
| 23 |
_.intersectionWith([arrays], [comparator]) |
| 24 |
_.join(array, [separator=',']) |
| 25 |
_.last(array) |
| 26 |
_.lastIndexOf(array, value, [fromIndex=array.length-1]) |
| 27 |
_.nth(array, [n=0]) |
| 28 |
_.pull(array, [values]) |
| 29 |
_.pullAll(array, values) |
| 30 |
_.pullAllBy(array, values, [iteratee=_.identity]) |
| 31 |
_.pullAllWith(array, values, [comparator]) |
| 32 |
_.pullAt(array, [indexes]) |
| 33 |
_.remove(array, [predicate=_.identity]) |
| 34 |
_.reverse(array) |
| 35 |
_.slice(array, [start=0], [end=array.length]) |
| 36 |
_.sortedIndex(array, value) |
| 37 |
_.sortedIndexBy(array, value, [iteratee=_.identity]) |
| 38 |
_.sortedIndexOf(array, value) |
| 39 |
_.sortedLastIndex(array, value) |
| 40 |
_.sortedLastIndexBy(array, value, [iteratee=_.identity]) |
| 41 |
_.sortedLastIndexOf(array, value) |
| 42 |
_.sortedUniq(array) |
| 43 |
_.sortedUniqBy(array, [iteratee]) |
| 44 |
_.tail(array) |
| 45 |
_.take(array, [n=1]) |
| 46 |
_.takeRight(array, [n=1]) |
| 47 |
_.takeRightWhile(array, [predicate=_.identity]) |
| 48 |
_.takeWhile(array, [predicate=_.identity]) |
| 49 |
_.union([arrays]) |
| 50 |
_.unionBy([arrays], [iteratee=_.identity]) |
| 51 |
_.unionWith([arrays], [comparator]) |
| 52 |
_.uniq(array) |
| 53 |
_.uniqBy(array, [iteratee=_.identity]) |
| 54 |
_.uniqWith(array, [comparator]) |
| 55 |
_.unzip(array) |
| 56 |
_.unzipWith(array, [iteratee=_.identity]) |
| 57 |
_.without(array, [values]) |
| 58 |
_.xor([arrays]) |
| 59 |
_.xorBy([arrays], [iteratee=_.identity]) |
| 60 |
_.xorWith([arrays], [comparator]) |
| 61 |
_.zip([arrays]) |
| 62 |
_.zipObject([props=[]], [values=[]]) |
| 63 |
_.zipObjectDeep([props=[]], [values=[]]) |
| 64 |
_.zipWith([arrays], [iteratee=_.identity]) |
Lodash - 集合
Lodash有很多易於使用的處理集合的方法。本章將詳細介紹它們。
Lodash 提供了各種處理集合的方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.countBy(collection, [iteratee=_.identity]) |
| 2 |
_.every(collection, [predicate=_.identity]) |
| 3 |
_.filter(collection, [predicate=_.identity]) |
| 4 |
_.find(collection, [predicate=_.identity], [fromIndex=0]) |
| 5 |
_.findLast(collection, [predicate=_.identity], [fromIndex=collection.length-1]) |
| 6 |
_.flatMap(collection, [iteratee=_.identity]) |
| 7 |
_.flatMapDeep(collection, [iteratee=_.identity]) |
| 8 |
_.flatMapDepth(collection, [iteratee=_.identity], [depth=1]) |
| 9 |
_.forEach(collection, [iteratee=_.identity]) |
| 10 |
_.forEachRight(collection, [iteratee=_.identity]) |
| 11 |
_.groupBy(collection, [iteratee=_.identity]) |
| 12 |
_.includes(collection, value, [fromIndex=0]) |
| 13 |
_.invokeMap(collection, path, [args]) |
| 14 |
_.keyBy(collection, [iteratee=_.identity]) |
| 15 |
_.map(collection, [iteratee=_.identity]) |
| 16 |
_.orderBy(collection, [iteratees=[_.identity]], [orders]) |
| 17 |
_.partition(collection, [predicate=_.identity]) |
| 18 |
_.reduce(collection, [iteratee=_.identity], [accumulator]) |
| 19 |
_.reduceRight(collection, [iteratee=_.identity], [accumulator]) |
| 20 |
_.reject(collection, [predicate=_.identity]) |
| 21 |
_.sample(collection) |
| 22 |
_.sampleSize(collection, [n=1]) |
| 23 |
_.shuffle(collection) |
| 24 |
_.size(collection) |
| 25 |
_.some(collection, [predicate=_.identity]) |
| 26 |
_.sortBy(collection, [iteratees=[_.identity]]) |
Lodash - 日期
Lodash 提供了一個 now 函式,用於獲取當前時間的毫秒數。
語法
_.now()
獲取自 Unix 紀元 (1970 年 1 月 1 日 00:00:00 UTC) 以來經過的毫秒數的時間戳。
輸出
(number) - 返回時間戳。
示例
var _ = require('lodash');
var result = _.now();
console.log(result);
將上述程式儲存到 **tester.js** 中。執行以下命令執行此程式。
命令
\>node tester.js
輸出
1601614929848
Lodash - 函式
Lodash 有很多易於使用的建立和處理函式的方法。本章將詳細介紹它們。
Lodash 提供了各種處理函式的方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.ary(func, [n=func.length]) |
| 2 |
_.before(n, func) |
| 3 |
_.bind(func, thisArg, [partials]) |
| 4 |
_.bindKey(object, key, [partials]) |
| 5 |
_.curry(func, [arity=func.length]) |
| 6 |
_.curryRight(func, [arity=func.length]) |
| 7 |
_.delay(func, wait, [args]) |
| 8 |
_.flip(func) |
| 9 |
_.memoize(func, [resolver]) |
| 10 |
_.negate(predicate) |
| 11 |
_.once(func) |
| 12 |
_.overArgs(func, [transforms=[_.identity]]) |
| 13 |
_.partial(func, [partials]) |
| 14 |
_.partialRight(func, [partials]) |
| 15 |
_.rearg(func, indexes) |
| 16 |
_.rest(func, [start=func.length-1]) |
| 17 |
_.spread(func, [start=0]) |
| 18 |
_.unary(func) |
| 19 |
_.wrap(value, [wrapper=identity]) |
Lodash - Lang (語言)
Lodash 有許多易於使用的通用方法。本章將詳細介紹它們。
Lodash 提供了各種通用方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.castArray(value) |
| 2 |
_.clone(value) |
| 3 |
_.cloneDeep(value) |
| 4 |
_.conformsTo(object, source) |
| 5 |
_.eq(value, other) |
| 6 |
_.gt(value, other) |
| 7 |
_.gte(value, other) |
| 8 |
_.isArguments(value) |
| 9 |
_.isArray(value) |
| 10 |
_.isArrayBuffer(value) |
| 11 |
_.isArrayLike(value) |
| 12 |
_.isArrayLikeObject(value) |
| 13 |
_.isBoolean(value) |
| 14 |
_.isBuffer(value) |
| 15 |
_.isDate(value) |
| 16 |
_.isEmpty(value) |
| 17 |
_.isEqual(value, other) |
| 18 |
_.isEqualWith(value, other, [customizer]) |
| 19 |
_.isError(value) |
| 20 |
_.isFinite(value) |
| 21 |
_.isFunction(value) |
| 22 |
_.isInteger(value) |
| 23 |
_.isLength(value) |
| 24 |
_.isMap(value) |
| 25 |
_.isMatch(object, source) |
| 26 |
_.isMatchWith(object, source, [customizer]) |
| 27 |
_.isNaN(value) |
| 28 |
_.isNative(value) |
| 29 |
_.isNil(value) |
| 30 |
_.isNull(value) |
| 31 |
_.isNumber(value) |
| 32 |
_.isObject(value) |
| 33 |
_.isObjectLike(value) |
| 34 |
_.isPlainObject(value) |
| 35 |
_.isRegExp(value) |
| 36 |
_.isSafeInteger(value) |
| 37 |
_.isSet(value) |
| 38 |
_.isString(value) |
| 39 |
_.isSymbol(value) |
| 40 |
_.isTypedArray(value) |
| 41 |
_.isUndefined(value) |
| 42 |
_.isWeakMap(value) |
| 43 |
_.isWeakSet(value) |
| 44 |
_.lt(value, other) |
| 45 |
_.lte(value, other) |
| 46 |
_.toArray(value) |
| 47 |
_.toFinite(value) |
| 48 |
_.toInteger(value) |
| 49 |
_.toLength(value) |
| 50 |
_.toNumber(value) |
| 51 |
_.toPlainObject(value) |
| 52 |
_.toSafeInteger(value) |
| 53 |
_.toString(value) |
Lodash - Math (數學)
Lodash擁有許多易於使用的數學相關方法。本章將詳細討論它們。
Lodash提供各種數學相關方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.add(augend, addend) |
| 2 |
_.ceil(number, [precision=0]) |
| 3 |
_.divide(dividend, divisor) |
| 4 | _.floor(number, [precision=0]) |
| 5 |
_.max(array) |
| 6 |
_.maxBy(array, [iteratee=_.identity]) |
| 7 |
_.mean(array) |
| 8 |
_.meanBy(array, [iteratee=_.identity]) |
| 9 |
_.min(array) |
| 10 |
_.minBy(array, [iteratee=_.identity]) |
| 11 |
_.multiply(multiplier, multiplicand) |
| 12 |
_.round(number, [precision=0]) |
| 13 |
_.subtract(minuend, subtrahend) |
| 14 |
_.sum(array) |
| 15 |
_.sumBy(array, [iteratee=_.identity]) |
Lodash - 數字
Lodash擁有許多易於使用的數字相關方法。本章將詳細討論它們。
Lodash提供各種數字相關方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.clamp(number, [lower], upper) |
| 2 |
_.inRange(number, [start=0], end) |
| 3 |
_.random([lower=0], [upper=1], [floating]) |
Lodash - 物件
Lodash擁有許多易於使用的物件相關方法。本章將詳細討論它們。
Lodash提供各種物件相關方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.assign(object, [sources]) |
| 2 |
_.assignIn(object, [sources]) |
| 3 |
_.assignInWith(object, sources, [customizer]) |
| 4 |
_.assignWith(object, sources, [customizer]) |
| 5 |
_.at(object, [paths]) |
| 6 |
_.create(prototype, [properties]) |
| 7 |
_.defaults(object, [sources]) |
| 8 |
_.defaultsDeep(object, [sources]) |
| 9 |
_.findKey(object, [predicate=_.identity]) |
| 10 |
_.findLastKey(object, [predicate=_.identity]) |
| 11 |
_.forIn(object, [iteratee=_.identity]) |
| 12 |
_.forInRight(object, [iteratee=_.identity]) |
| 13 |
_.forOwn(object, [iteratee=_.identity]) |
| 14 |
_.forOwnRight(object, [iteratee=_.identity]) |
| 15 |
_.functions(object) |
| 16 |
_.functionsIn(object) |
| 17 |
_.get(object, path, [defaultValue]) |
| 18 |
_.has(object, path) |
| 19 |
_.hasIn(object, path) |
| 20 |
_.invert(object) |
| 21 |
_.invertBy(object, [iteratee=_.identity]) |
| 22 |
_.invoke(object, path, [args]) |
| 23 |
_.keys(object) |
| 24 |
_.keysIn(object) |
| 25 |
_.mapKeys(object, [iteratee=_.identity]) |
| 26 |
_.mapValues(object, [iteratee=_.identity]) |
| 27 |
_.merge(object, [sources]) |
| 28 |
_.mergeWith(object, sources, customizer) |
| 29 |
_.omit(object, [paths]) |
| 30 |
_.omitBy(object, [predicate=_.identity]) |
| 31 |
_.pick(object, [paths]) |
| 32 |
_.pickBy(object, [predicate=_.identity]) |
| 33 |
_.result(object, path, [defaultValue]) |
| 34 |
_.set(object, path, value) |
| 35 |
_.setWith(object, path, value, [customizer]) |
| 36 |
_.toPairs(object) |
| 37 |
_.toPairsIn(object) |
| 38 |
_.transform(object, [iteratee=_.identity], [accumulator]) |
| 39 |
_.unset(object, path) |
| 40 |
_.update(object, path, updater) |
| 41 |
_.updateWith(object, path, updater, [customizer]) |
| 42 |
_.values(object) |
| 43 |
_.valuesIn(object) |
Lodash - Seq (序列)
Lodash擁有許多易於使用的序列相關方法。本章將詳細討論它們。
Lodash提供各種序列相關方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.chain(value) |
| 2 |
_.tap(value, interceptor) |
| 3 |
_.thru(value, interceptor) |
| 4 |
_.prototype[Symbol.iterator]() |
| 5 |
_.prototype.at([paths]) |
| 6 |
_.prototype.chain() |
| 7 |
_.prototype.commit() |
| 8 |
_.prototype.next() |
| 9 |
_.prototype.plant(value) |
| 10 |
_.prototype.reverse() |
| 11 |
_.prototype.value() |
Lodash - 字串
Lodash擁有許多易於使用的字串操作方法。本章將詳細討論它們。
Lodash提供各種字串相關方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.camelCase([string='']) |
| 2 |
_.capitalize([string='']) |
| 3 |
_.deburr([string='']) |
| 4 |
_.endsWith([string=''], [target], [position=string.length]) |
| 5 |
_.escape([string='']) |
| 6 |
_.escapeRegExp([string='']) |
| 7 |
_.kebabCase([string='']) |
| 8 |
_.lowerCase([string='']) |
| 9 |
_.lowerFirst([string='']) |
| 10 |
_.pad([string=''], [length=0], [chars=' ']) |
| 11 |
_.padEnd([string=''], [length=0], [chars=' ']) |
| 12 |
_.padStart([string=''], [length=0], [chars=' ']) |
| 13 |
_.parseInt(string, [radix=10]) |
| 14 |
_.repeat([string=''], [n=1]) |
| 15 |
_.replace([string=''], pattern, replacement) |
| 16 |
_.snakeCase([string='']) |
| 17 |
_.split([string=''], separator, [limit]) |
| 18 |
_.startCase([string='']) |
| 19 |
_.startsWith([string=''], [target], [position=0]) |
| 20 |
_.template([string=''], [options={}]) |
| 21 |
_.toLower([string='']) |
| 22 |
_.toUpper([string='']) |
| 23 |
_.trim([string=''], [chars=whitespace]) |
| 24 |
_.trimEnd([string=''], [chars=whitespace]) |
| 25 |
_.trimStart([string=''], [chars=whitespace]) |
| 26 |
_.truncate([string=''], [options={}]) |
| 27 |
_.unescape([string='']) |
| 28 |
_.upperCase([string='']) |
| 29 |
_.upperFirst([string='']) |
| 30 |
_.words([string=''], [pattern]) |
Lodash - Util (工具)
Lodash擁有許多易於使用的實用程式方法。本章將詳細討論它們。
Lodash提供各種實用程式方法,如下所示:
| 序號 | 方法及語法 |
|---|---|
| 1 |
_.cond(pairs) |
| 2 |
_.conforms(source) |
| 3 |
_.constant(value) |
| 4 |
_.defaultTo(value, defaultValue) |
| 5 |
_.flow([funcs]) |
| 6 |
_.flowRight([funcs]) |
| 7 |
_.identity(value) |
| 8 |
_.iteratee([func=_.identity]) |
| 9 |
_.matches(source) |
| 10 |
_.matchesProperty(path, srcValue) |
| 11 |
_.method(path, [args]) |
| 12 |
_.methodOf(object, [args]) |
| 13 |
_.mixin([object=lodash], source, [options={}]) |
| 14 |
_.noConflict() |
| 15 |
_.noop() |
| 16 |
_.nthArg([n=0]) |
| 17 |
_.over([iteratees=[_.identity]]) |
| 18 |
_.overEvery([predicates=[_.identity]]) |
| 19 |
_.overSome([predicates=[_.identity]]) |
| 20 |
_.property(path) |
| 21 |
_.propertyOf(object) |
| 22 |
_.range([start=0], end, [step=1]) |
| 23 |
_.rangeRight([start=0], end, [step=1]) |
| 24 |
_.runInContext([context=root]) |
| 25 |
_.stubArray() |
| 26 |
_.stubFalse() |
| 27 |
_.stubObject() |
| 28 |
_.stubString() |
| 29 |
_.stubTrue() |
| 30 |
_.times(n, [iteratee=_.identity]) |
| 31 |
_.toPath(value) |
| 32 |
_.uniqueId([prefix='']) |
Lodash - 屬性
本章詳細討論Lodash屬性。
| 序號 | 方法及語法 |
|---|---|
| 1 | _.VERSION − (字串): 語義版本號。 |
| 2 | _.templateSettings − (物件): 預設情況下,Lodash使用的模板分隔符類似於嵌入式Ruby (ERB)以及ES2015模板字串。更改以下模板設定以使用替代分隔符。 |
| 3 | _.templateSettings.escape − (正則表示式): 用於檢測需要HTML轉義的資料屬性值。 |
| 4 | _.templateSettings.evaluate − (正則表示式): 用於檢測要計算的程式碼。 |
| 5 | _.templateSettings.imports − (物件): 用於將變數匯入編譯後的模板。 |
| 6 | _.templateSettings.interpolate − (正則表示式): 用於檢測要注入的資料屬性值。 |
| 7 | _.templateSettings.variable − (字串): 用於在模板文字中引用資料物件。 |
Lodash - 方法
本章詳細討論Lodash屬性。
| 序號 | 方法及語法 |
|---|---|
| 1 | _.VERSION − (字串): 語義版本號。 |
| 2 | _.templateSettings − (物件): 預設情況下,Lodash使用的模板分隔符類似於嵌入式Ruby (ERB)以及ES2015模板字串。更改以下模板設定以使用替代分隔符。 |
| 3 | _.templateSettings.escape − (正則表示式): 用於檢測需要HTML轉義的資料屬性值。 |
| 4 | _.templateSettings.evaluate − (正則表示式): 用於檢測要計算的程式碼。 |
| 5 | _.templateSettings.imports − (物件): 用於將變數匯入編譯後的模板。 |
| 6 | _.templateSettings.interpolate − (正則表示式): 用於檢測要注入的資料屬性值。 |
| 7 | _.templateSettings.variable − (字串): 用於在模板文字中引用資料物件。 |