javascript工具庫(kù)之lodash詳解_第1頁(yè)
已閱讀1頁(yè),還剩0頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JavaScript工具庫(kù)之Lodash詳解前言你還在為JavaScript中的數(shù)據(jù)轉(zhuǎn)換、匹配、查找等煩惱嗎? 一堆看似簡(jiǎn)單的foreach,卻冗長(zhǎng)無(wú)趣?可仍還在不停的repeat it ! 也許你已經(jīng)用上了Underscore.js -不錯(cuò),你已經(jīng)進(jìn)步很大一步了。然而今天我希望你能更進(jìn)一步,利用lodash替換掉 Underscore。lodash一開(kāi)始是Underscore.js庫(kù)的一個(gè)fork,因?yàn)楹推渌?Underscore.j

2、s的)貢獻(xiàn)者意見(jiàn)相左。John-David Da代on的最初目標(biāo), 是提供更多“一致的跨瀏覽器行為……,并改善性能”。之后,該項(xiàng)目在現(xiàn)有成功的基礎(chǔ)之上取得了更大的成果。最近lodash也 發(fā)布了3.5版,成為了npm包倉(cāng)庫(kù)中依賴最多的庫(kù)。它正在擺脫尾絲身份?成為開(kāi)發(fā)者的常規(guī)的選擇之一。現(xiàn)在我們所熟知的很多開(kāi)源項(xiàng)目都已經(jīng)使用或者轉(zhuǎn)到了lodash陣營(yíng)之上。比如JavaScript轉(zhuǎn)譯器Babel、博客平臺(tái)Ghost,和項(xiàng) 目腳手架工具Ye

3、oman。特別Ghost是從Underscore遷移至!]了lodash,Ghost的創(chuàng)始人John O'Nolan對(duì)于此曾評(píng)價(jià)到:“這是一 個(gè)非常明智的選擇,它幾乎完全是由我們開(kāi)源開(kāi)發(fā)社區(qū)推動(dòng)的。我們發(fā)現(xiàn)lodash包含更多的功能,更好的性能、恰到好處地使 用了semver,并且在Node.js社區(qū)(以及其他依賴)中越來(lái)越搶眼“。lodash演練lodash主要使用了延遲計(jì)算,使得lodash其性能遠(yuǎn)遠(yuǎn)超過(guò)Underscore

4、。在lodash中延遲計(jì)算意味著在我們的鏈?zhǔn)椒椒ㄔ陲@示 或隱式的value。調(diào)用之前是不會(huì)執(zhí)行的。由于這種執(zhí)行的延后,因此lodash可以進(jìn)行shortcut fusion這樣的優(yōu)化,通過(guò)合并 鏈?zhǔn)絠teratee大大降低迭代的次數(shù)。從而大大提供其執(zhí)行性能。百說(shuō)不如一練?下面我們以用戶信息為例:var users =[{'user*: 'barney', 'age': 36 },{,user*:

5、'fred', 'age': 40 },{'user*: 'pebbles', 'age1:18}];.獲取所有用戶名字,并以“「‘分割var names = _.chain(users) .map(function(user){ retu rn user.user;}).join(“,“).value();console.log(names);個(gè)人七較喜歡lodash延遲

6、計(jì)算的現(xiàn)實(shí)value,以及JavaScript的函數(shù)式風(fēng)格。在這里首先將users對(duì)象包裝成為lodash對(duì)象,再 map獲取所有用戶的名稱,并最后利用join將用戶名稱以”,“連接在一起。注意這里只是一串方法鏈,如果你沒(méi)有顯樣的調(diào)用 value方法,使其立即執(zhí)行的化,你將會(huì)得到如下的LodashWrapper延遲表達(dá)式:LodashWrapper {_wrapped_: LazyWrapper,actions_: Array[1],

7、chain_: true, constructor: function, after: function...}因?yàn)檠舆t表達(dá)式的存在,因此我們可以多次增加方法鏈,但這并不會(huì)被執(zhí)行,所以不會(huì)存在性能的問(wèn)題,最后知道我們需要使 用的時(shí)候,使用value顯式立即執(zhí)行即可。1 .獲取最年輕的用戶var youngest = _.chain(users) .min(function(user){ retur n user.age;}).value

8、();console.log(youngest);這里利用了lodash提供的min函數(shù)可以輕易的解決。在這里博主還希望用另外一個(gè)方式解釋lodash方法鏈的優(yōu)化,上面的方法可以等價(jià)為下面的方式,以age排序的第一個(gè)user:var youngest2 = _.chain(users).sortBy(“age“).map(function(user){ console.I og(“map“, user); return user;}).

9、first().value();console.Iog(youngest2);在這里博主多加了一個(gè)map作為log輸出,如果你執(zhí)行這行代碼的時(shí)候,你會(huì)驚奇的看見(jiàn)這里只會(huì)有一個(gè)user的輸出?這點(diǎn)可 以證明在立即執(zhí)行的時(shí)候lodash為我們的方法鏈做了可靠的優(yōu)化;如果我們?nèi)サ鬴irst函數(shù)你則會(huì)看見(jiàn)有3個(gè)user對(duì)象的輸出。2 .獲取最年長(zhǎng)的用戶var oldest = _.chain(users) .max(function(user)

10、{ retu rn user.age;}).value();console.Iog(oldest);這里則使用lodash的max函數(shù)。3 .用戶數(shù)組到用戶Map的轉(zhuǎn)換在開(kāi)發(fā)中我們經(jīng)常會(huì)有把一堆素組形式的數(shù)據(jù)轉(zhuǎn)換為Object形式的數(shù)組,便于根據(jù)屬性key值查找,下面 將以u(píng)ser對(duì)象來(lái)演 示:var userObj = _.chain(users).map(function(user){return [user.user, user.

11、age];}).zipObject().value();console.log(userObj);利用lodash首先將user數(shù)組map為[key,value]的數(shù)組集合?最后利用zipObject將結(jié)果轉(zhuǎn)換為Object對(duì)象? zipObject會(huì)利用結(jié) 果集的第一項(xiàng)作為key,第二項(xiàng)作為value生^Object °結(jié)尾以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。JavaScript工具庫(kù)之Lo

12、dash詳解前言你還在為JavaScript中的數(shù)據(jù)轉(zhuǎn)換、匹配、查找等煩惱嗎? 一堆看似簡(jiǎn)單的foreach,卻冗長(zhǎng)無(wú)趣?可仍還在不停的repeat it ! 也許你已經(jīng)用上了Underscore.js -不錯(cuò),你已經(jīng)進(jìn)步很大一步了。然而今天我希望你能更進(jìn)一步,利用lodash替換掉 Underscore。lodash一開(kāi)始是Underscore.js庫(kù)的一個(gè)fork,因?yàn)楹推渌?Underscore.js的)貢獻(xiàn)者意見(jiàn)相左。John-

13、David Da代on的最初目標(biāo), 是提供更多“一致的跨瀏覽器行為……,并改善性能”。之后,該項(xiàng)目在現(xiàn)有成功的基礎(chǔ)之上取得了更大的成果。最近lodash也 發(fā)布了3.5版,成為了npm包倉(cāng)庫(kù)中依賴最多的庫(kù)。它正在擺脫尾絲身份?成為開(kāi)發(fā)者的常規(guī)的選擇之一。現(xiàn)在我們所熟知的很多開(kāi)源項(xiàng)目都已經(jīng)使用或者轉(zhuǎn)到了lodash陣營(yíng)之上。比如JavaScript轉(zhuǎn)譯器Babel、博客平臺(tái)Ghost,和項(xiàng) 目腳手架工具Yeoman。特別Ghost是從Un

14、derscore遷移至!]了lodash,Ghost的創(chuàng)始人John O'Nolan對(duì)于此曾評(píng)價(jià)到:“這是一 個(gè)非常明智的選擇,它幾乎完全是由我們開(kāi)源開(kāi)發(fā)社區(qū)推動(dòng)的。我們發(fā)現(xiàn)lodash包含更多的功能,更好的性能、恰到好處地使 用了semver,并且在Node.js社區(qū)(以及其他依賴)中越來(lái)越搶眼“。lodash演練lodash主要使用了延遲計(jì)算,使得lodash其性能遠(yuǎn)遠(yuǎn)超過(guò)Underscore。在lodash中延遲計(jì)算意味著

15、在我們的鏈?zhǔn)椒椒ㄔ陲@示 或隱式的value。調(diào)用之前是不會(huì)執(zhí)行的。由于這種執(zhí)行的延后,因此lodash可以進(jìn)行shortcut fusion這樣的優(yōu)化,通過(guò)合并 鏈?zhǔn)絠teratee大大降低迭代的次數(shù)。從而大大提供其執(zhí)行性能。百說(shuō)不如一練?下面我們以用戶信息為例:var users =[{'user*: 'barney', 'age': 36 },{,user*: 'fred',

16、'age': 40 },{'user*: 'pebbles', 'age1:18}];.獲取所有用戶名字,并以“「‘分割var names = _.chain(users) .map(function(user){ retu rn user.user;}).join(“,“).value();console.log(names);個(gè)人七較喜歡lodash延遲計(jì)算的現(xiàn)實(shí)value,以及Jav

17、aScript的函數(shù)式風(fēng)格。在這里首先將users對(duì)象包裝成為lodash對(duì)象,再 map獲取所有用戶的名稱,并最后利用join將用戶名稱以”,“連接在一起。注意這里只是一串方法鏈,如果你沒(méi)有顯樣的調(diào)用 value方法,使其立即執(zhí)行的化,你將會(huì)得到如下的LodashWrapper延遲表達(dá)式:LodashWrapper {_wrapped_: LazyWrapper,actions_: Array[1], chain_: true, co

18、nstructor: function, after: function...}因?yàn)檠舆t表達(dá)式的存在,因此我們可以多次增加方法鏈,但這并不會(huì)被執(zhí)行,所以不會(huì)存在性能的問(wèn)題,最后知道我們需要使 用的時(shí)候,使用value顯式立即執(zhí)行即可。1 .獲取最年輕的用戶var youngest = _.chain(users) .min(function(user){ retur n user.age;}).value();console.log(y

19、oungest);這里利用了lodash提供的min函數(shù)可以輕易的解決。在這里博主還希望用另外一個(gè)方式解釋lodash方法鏈的優(yōu)化,上面的方法可以等價(jià)為下面的方式,以age排序的第一個(gè)user:var youngest2 = _.chain(users).sortBy(“age“).map(function(user){ console.I og(“map“, user); return user;}).first().value();

20、console.Iog(youngest2);在這里博主多加了一個(gè)map作為log輸出,如果你執(zhí)行這行代碼的時(shí)候,你會(huì)驚奇的看見(jiàn)這里只會(huì)有一個(gè)user的輸出?這點(diǎn)可 以證明在立即執(zhí)行的時(shí)候lodash為我們的方法鏈做了可靠的優(yōu)化;如果我們?nèi)サ鬴irst函數(shù)你則會(huì)看見(jiàn)有3個(gè)user對(duì)象的輸出。2 .獲取最年長(zhǎng)的用戶var oldest = _.chain(users) .max(function(user){ retu rn user.a

21、ge;}).value();console.Iog(oldest);這里則使用lodash的max函數(shù)。3 .用戶數(shù)組到用戶Map的轉(zhuǎn)換在開(kāi)發(fā)中我們經(jīng)常會(huì)有把一堆素組形式的數(shù)據(jù)轉(zhuǎn)換為Object形式的數(shù)組,便于根據(jù)屬性key值查找,下面 將以u(píng)ser對(duì)象來(lái)演 示:var userObj = _.chain(users).map(function(user){return [user.user, user.age];}).zipObjec

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論