摘要:愚人碼頭注即創(chuàng)建一個(gè)新數(shù)組,這個(gè)數(shù)組中的值,為第一個(gè)數(shù)字參數(shù)排除了給定數(shù)組中的值。如果迭代函數(shù)顯式的返回,迭代會(huì)提前退出。如此方法類(lèi)似于,除了它允許指定迭代函數(shù)結(jié)果如何排序。
loadsh簡(jiǎn)介
??????Lodash是一個(gè)一致性、模塊化、高性能的 JavaScript 實(shí)用工具庫(kù)。Lodash 通過(guò)降低 array、number、objects、string 等等的使用難度從而讓 JavaScript 變得更簡(jiǎn)單。
Lodash 的模塊化方法 非常適用于:
遍歷 array、object 和 string
對(duì)值進(jìn)行操作和檢測(cè)
創(chuàng)建符合功能的函數(shù)
1、 lodash的引用
npm i -g npm npm i --save lodash import _ from "lodash"
2、 lodash的常用方法
數(shù)組 Array
_.difference(array, [values])
創(chuàng)建一個(gè)具有唯一array值的數(shù)組,每個(gè)值不包含在其他給定的數(shù)組中。(愚人碼頭注:即創(chuàng)建一個(gè)新數(shù)組,這個(gè)數(shù)組中的值,為第一個(gè)數(shù)字(array 參數(shù))排除了給定數(shù)組中的值。)該方法使用 SameValueZero做相等比較。結(jié)果值的順序是由第一個(gè)數(shù)組中的順序確定。
如: _.difference([2, 1, 1994], [4, 2]); // => [1, 1994]
_.remove(array, [predicate=_.identity])
移除數(shù)組中predicate(斷言)返回為真值的所有元素,并返回移除元素組成的數(shù)組。predicate(斷言) 會(huì)傳入3個(gè)參數(shù): (value, index, array)。
如:var array = [1, 2, 3, 4]; var evens = _.remove(array, function(n) { return n % 2 == 0; }); console.log(array); // => [1, 3] console.log(evens); // => [2, 4]
_.uniq(array)
創(chuàng)建一個(gè)去重后的array數(shù)組副本。使用了 SameValueZero 做等值比較。只有第一次出現(xiàn)的元素才會(huì)被保留。
如:_.uniq([2, 1, 2]); // => [2, 1]
_.last(array)
獲取array中的最后一個(gè)元素。
如:_.last([1, 2, 3]); // => 3
集合 Collection
_.forEach(collection, [iteratee=_.identity])
調(diào)用 iteratee 遍歷 collection(集合) 中的每個(gè)元素, iteratee 調(diào)用3個(gè)參數(shù): (value, index|key, collection)。 如果迭代函數(shù)(iteratee)顯式的返回 false ,迭代會(huì)提前退出。
如:_([1, 2]).forEach(function(value) { console.log(value); }); // => Logs `1` then `2`. _.forEach({ "a": 1, "b": 2 }, function(value, key) { console.log(key); }); // => Logs "a" then "b" (iteration order is not guaranteed).
_.filter(collection, [predicate=_.identity])
遍歷 collection(集合)元素,返回 predicate(斷言函數(shù))返回真值 的所有元素的數(shù)組。 predicate(斷言函數(shù))調(diào)用三個(gè)參數(shù):(value, index|key, collection)。
如:var users = [ { "user": "barney", "age": 36, "active": true }, { "user": "fred", "age": 40, "active": false } ]; _.filter(users, function(o) { return !o.active; }); // => objects for ["fred"] // The `_.matches` iteratee shorthand. _.filter(users, { "age": 36, "active": true }); // => objects for ["barney"] // The `_.matchesProperty` iteratee shorthand. _.filter(users, ["active", false]); // => objects for ["fred"] // The `_.property` iteratee shorthand. _.filter(users, "active"); // => objects for ["barney"]
_.groupBy(collection, [iteratee=_.identity])
創(chuàng)建一個(gè)對(duì)象,key 是 iteratee 遍歷 collection(集合) 中的每個(gè)元素返回的結(jié)果。 分組值的順序是由他們出現(xiàn)在 collection(集合) 中的順序確定的。每個(gè)鍵對(duì)應(yīng)的值負(fù)責(zé)生成 key 的元素組成的數(shù)組。iteratee 調(diào)用 1 個(gè)參數(shù): (value)。
如:var users = [ { "user": "barney", "age": 36, "active": true }, { "user": "fred", "age": 40, "active": false } ]; _.groupBy(users, "user"); // => {"barney":[{"user":"barney","age":36,"active":true}],"fred":[{"user":"fred","age":40,"active":false}]}
_.includes(collection, value, [fromIndex=0])
檢查 value(值) 是否在 collection(集合) 中。如果 collection(集合)是一個(gè)字符串,那么檢查 value(值,子字符串) 是否在字符串中, 否則使用 SameValueZero 做等值比較。 如果指定 fromIndex 是負(fù)數(shù),那么從 collection(集合) 的結(jié)尾開(kāi)始檢索。
如:_.includes([1, 2, 3], 1); // => true _.includes([1, 2, 3], 1, 2); // => false _.includes({ "user": "fred", "age": 40 }, "fred"); // => true _.includes("pebbles", "eb"); // => true
_.orderBy(collection, [iteratees=[_.identity]], [orders])
此方法類(lèi)似于_.sortBy,除了它允許指定 iteratee(迭代函數(shù))結(jié)果如何排序。 如果沒(méi)指定 orders(排序),所有值以升序排序。 否則,指定為"desc" 降序,或者指定為 "asc" 升序,排序?qū)?yīng)值。
如:var users = [ { "user": "fred", "age": 48 }, { "user": "barney", "age": 34 }, { "user": "fred", "age": 40 }, { "user": "barney", "age": 36 } ]; // 以 `user` 升序排序 再 `age` 以降序排序。 _.orderBy(users, ["user", "age"], ["asc", "desc"]); // => objects for [["barney", 36], ["barney", 34], ["fred", 48], ["fred", 40]]
_.sortBy(collection, [iteratees=[_.identity]])
創(chuàng)建一個(gè)元素?cái)?shù)組。 以 iteratee 處理的結(jié)果升序排序。 這個(gè)方法執(zhí)行穩(wěn)定排序,也就是說(shuō)相同元素會(huì)保持原始排序。 iteratees 調(diào)用1個(gè)參數(shù): (value)。
如:var users = [ { "user": "fred", "age": 48 }, { "user": "barney", "age": 36 }, { "user": "fred", "age": 40 }, { "user": "barney", "age": 34 } ]; _.sortBy(users, function(o) { return o.user; }); // => objects for [["barney", 36], ["barney", 34], ["fred", 48], ["fred", 40]] _.sortBy(users, ["user", "age"]); // => objects for [["barney", 34], ["barney", 36], ["fred", 40], ["fred", 48]] _.sortBy(users, "user", function(o) { return Math.floor(o.age / 10); }); // => objects for [["barney", 36], ["barney", 34], ["fred", 48], ["fred", 40]]
_.debounce(func, [wait=0], [options={}])
創(chuàng)建一個(gè) debounced(防抖動(dòng))函數(shù),該函數(shù)會(huì)從上一次被調(diào)用后,延遲 wait 毫秒后調(diào)用 func 方法。 debounced(防抖動(dòng))函數(shù)提供一個(gè) cancel 方法取消延遲的函數(shù)調(diào)用以及 flush 方法立即調(diào)用。 可以提供一個(gè) options(選項(xiàng)) 對(duì)象決定如何調(diào)用 func 方法,options.leading 與|或 options.trailing 決定延遲前后如何觸發(fā)(愚人碼頭注:是 先調(diào)用后等待 還是 先等待后調(diào)用)。 func 調(diào)用時(shí)會(huì)傳入最后一次提供給 debounced(防抖動(dòng))函數(shù) 的參數(shù)。 后續(xù)調(diào)用的 debounced(防抖動(dòng))函數(shù)返回是最后一次 func 調(diào)用的結(jié)果。
注意: 如果 leading 和 trailing 選項(xiàng)為 true, 則 func 允許 trailing 方式調(diào)用的條件為: 在 wait 期間多次調(diào)用防抖方法。
如果 wait 為 0 并且 leading 為 false, func調(diào)用將被推遲到下一個(gè)點(diǎn),類(lèi)似setTimeout為0的超時(shí)。
如:// 避免窗口在變動(dòng)時(shí)出現(xiàn)昂貴的計(jì)算開(kāi)銷(xiāo)。 jQuery(window).on("resize", _.debounce(calculateLayout, 150)); // 當(dāng)點(diǎn)擊時(shí) `sendMail` 隨后就被調(diào)用。 jQuery(element).on("click", _.debounce(sendMail, 300, { "leading": true, "trailing": false })); // 確保 `batchLog` 調(diào)用1次之后,1秒內(nèi)會(huì)被觸發(fā)。 var debounced = _.debounce(batchLog, 250, { "maxWait": 1000 }); var source = new EventSource("/stream"); jQuery(source).on("message", debounced); // 取消一個(gè) trailing 的防抖動(dòng)調(diào)用 jQuery(window).on("popstate", debounced.cancel);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100516.html
摘要:以及的不同之處原文譯者我并不是一個(gè)包管理器的專(zhuān)家。因此如果一年后我運(yùn)行,會(huì)安裝版本號(hào)為的最新版本的。這會(huì)導(dǎo)致循環(huán)依賴(lài)以及增加了版本不匹配的可能。從我目前收集的來(lái)看,的最初的主要目的是針對(duì)由于之前章節(jié)提及的相關(guān)行為導(dǎo)致的安裝的不確定性。 npm, yarn以及pnpm的不同之處 原文:Overview of differences between npm, yarn and pnpm ...
摘要:所以針對(duì)此類(lèi)事件則需要進(jìn)行節(jié)流,或者防抖動(dòng)處理。節(jié)流判斷是否已空閑,如果在執(zhí)行中,則直接函數(shù)節(jié)流二防抖對(duì)于一定時(shí)間段內(nèi)的連續(xù)的函數(shù)調(diào)用,只執(zhí)行一次原理其實(shí)就是一個(gè)定時(shí)器,當(dāng)我們觸發(fā)一個(gè)事件時(shí),讓這個(gè)事件延遲一會(huì)在執(zhí)行。 在瀏覽器dom事件里面,一些事件會(huì)隨著用戶(hù)的操作不間斷的觸發(fā),比如:為一個(gè)元素綁定拖拽事件,為頁(yè)面綁定resize事件(重新調(diào)整瀏覽器窗口大?。?,頁(yè)面滾動(dòng)。如果dom操...
摘要:寫(xiě)此文的目的是為了總結(jié)在開(kāi)發(fā)中能增加我們開(kāi)發(fā)速度及能給我們帶來(lái)方便的工具與網(wǎng)站及一些小眾框架只限于簡(jiǎn)介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我在這里感激不盡讓我們發(fā)現(xiàn)美并記錄它第一次寫(xiě)文章請(qǐng)多多包涵如有我沒(méi)有寫(xiě)到的但又是一些好用的工具及 寫(xiě)此文的目的是為了總結(jié)在開(kāi)發(fā)中能增加我們開(kāi)發(fā)速度及能給我們帶來(lái)方便的工具與網(wǎng)站及一些小眾框架只限于簡(jiǎn)介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我...
摘要:寫(xiě)此文的目的是為了總結(jié)在開(kāi)發(fā)中能增加我們開(kāi)發(fā)速度及能給我們帶來(lái)方便的工具與網(wǎng)站及一些小眾框架只限于簡(jiǎn)介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我在這里感激不盡讓我們發(fā)現(xiàn)美并記錄它第一次寫(xiě)文章請(qǐng)多多包涵如有我沒(méi)有寫(xiě)到的但又是一些好用的工具及 寫(xiě)此文的目的是為了總結(jié)在開(kāi)發(fā)中能增加我們開(kāi)發(fā)速度及能給我們帶來(lái)方便的工具與網(wǎng)站及一些小眾框架只限于簡(jiǎn)介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我...
閱讀 4015·2023-04-26 02:13
閱讀 2259·2021-11-08 13:13
閱讀 2744·2021-10-11 10:59
閱讀 1743·2021-09-03 00:23
閱讀 1314·2019-08-30 15:53
閱讀 2292·2019-08-28 18:22
閱讀 3061·2019-08-26 10:45
閱讀 743·2019-08-23 17:58