摘要:數(shù)據(jù)結(jié)構(gòu)類型擴(kuò)展相對(duì)之類的強(qiáng)類型語(yǔ)言,有一點(diǎn)很大的區(qū)別就是,數(shù)據(jù)結(jié)構(gòu)只有與,并且都是動(dòng)態(tài)可變的,而有等數(shù)據(jù)結(jié)構(gòu)。所以,為了能在中也使用這些數(shù)據(jù)結(jié)構(gòu),就應(yīng)運(yùn)而生。擴(kuò)充了中的不可變集合,即一旦創(chuàng)建就不能改變的數(shù)據(jù)類型。
js 數(shù)據(jù)結(jié)構(gòu)類型擴(kuò)展:immutable-js
相對(duì) java、.net 之類的強(qiáng)類型語(yǔ)言,js 有一點(diǎn)很大的區(qū)別就是,數(shù)據(jù)結(jié)構(gòu)只有 array 與 object,并且都是動(dòng)態(tài)可變的,而 java 有 List, Set, Map 等數(shù)據(jù)結(jié)構(gòu)。所以,為了能在 js 中也使用這些數(shù)據(jù)結(jié)構(gòu),immutable-js 就應(yīng)運(yùn)而生。
1. immutable-jsimmutable-js 擴(kuò)充了 JavaScript 中的不可變集合,即一旦創(chuàng)建就不能改變的數(shù)據(jù)類型。這樣可簡(jiǎn)化應(yīng)用開發(fā)、無(wú)防御復(fù)制、啟用更先進(jìn)的內(nèi)存方案,以及使用更簡(jiǎn)單的邏輯檢查更新。持久化數(shù)據(jù)提供可修改的 API,這些 API 不在原地更新數(shù)據(jù),而是產(chǎn)生新的更新后的數(shù)據(jù)。
2. 提供的數(shù)據(jù)類型List: 有序索引集合,類似 JavaScript 中的 Array
Map: 無(wú)序鍵值對(duì)((key, value) pairs)集合
OrderedMap: 有序的 Map
Set: 無(wú)重復(fù)值的集合
OrderedSet: 有序的 Set
Stack: 支持元素添加和移除的索引集合
Range(): 返回一個(gè)從 start 到 end,步長(zhǎng) step 填充的 Seq.Indexed 集合,start 默認(rèn)值為 0,step 默認(rèn)值為 1,end 默認(rèn)為無(wú)窮大。如果 start = end,則返回空集合。
Repeat(): 返回一個(gè)用 value 重復(fù) times 次的 Seq.Indexed 集合。如果 times 未定義,則返回?zé)o限 value 值的 Seq 集合。
Record: 類似于 JavaScript 的 Object,但是只接收特定字符串為 key,并有默認(rèn)值
Seq: 允許不通過中間集合讓高階集合函數(shù)(如 map, filter)高效鏈?zhǔn)秸{(diào)用的惰性操作集合
Collection: 所有數(shù)據(jù)結(jié)構(gòu)的基類
更多數(shù)據(jù)類型參考 immutable-js - docs.
3. 提供的 API 3.1 fromJS: 將一個(gè) js 數(shù)據(jù)轉(zhuǎn)換為 immutable-js 類型的數(shù)據(jù)const { fromJS, isKeyed } = require("immutable@4.0.0-rc.9"); fromJS({ a: {b: [10, 20, 30]}, c: 40}, function (key, value, path) { console.log(key, value, path) return isKeyed(value) ? value.toOrderedMap() : value.toList() }) > "b", [ 10, 20, 30 ], [ "a", "b" ] > "a", {b: [10, 20, 30]}, [ "a" ] > "", {a: {b: [10, 20, 30]}, c: 40}, []
詳情參考 immutable-js - docs - fromJS.
3.2 is: 對(duì)兩個(gè)對(duì)象進(jìn)行比較const { Map, is } = require("immutable@4.0.0-rc.9") const map1 = Map({ a: 1, b: 1, c: 1 }) const map2 = Map({ a: 1, b: 1, c: 1 }) assert.equal(map1 !== map2, true) assert.equal(Object.is(map1, map2), false) assert.equal(is(map1, map2), true)
詳情參考 immutable-js - docs - is.
3.3 更多更多 API 參考 immutable-js - docs.
4. 后續(xù)更多博客,查看 https://github.com/senntyou/blogs
作者:深予之 (@senntyou)
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97796.html
摘要:例如維護(hù)一份在內(nèi)部,來判斷是否有變化,下面這個(gè)例子就是一個(gè)構(gòu)造函數(shù),如果將它的實(shí)例傳入對(duì)象作為第一個(gè)參數(shù),就能夠后面的處理對(duì)象中使用其中的方法上面這個(gè)構(gòu)造函數(shù)相比源代碼省略了很多判斷的部分。 showImg(https://segmentfault.com/img/bV27Dy?w=1400&h=544); 博客鏈接:下一代狀態(tài)管理工具 immer 簡(jiǎn)介及源碼解析 JS 里面的變量類...
摘要:一向量字典樹字典樹,一種用空間換取時(shí)間的樹形數(shù)據(jù)結(jié)構(gòu),主要特點(diǎn)是利用字符串的公共前綴來挺升查詢性能。還有最終的數(shù)組表示的真實(shí)存儲(chǔ)的鍵值,存儲(chǔ)了,存儲(chǔ)了。這其中還有一種節(jié)點(diǎn)進(jìn)行了沖突的處理。 本文受深入探究Immutable.js的實(shí)現(xiàn)機(jī)制這篇文章啟發(fā),結(jié)合自己對(duì)Map源碼的解讀,談?wù)勎覍?duì)immutable-js中map數(shù)據(jù)結(jié)構(gòu)的理解,若有不正確的地方,歡迎指正。 一、Vector Tr...
摘要:當(dāng)大家考慮在項(xiàng)目中使用的時(shí)候,第一個(gè)問題往往是他們的應(yīng)用的速度和響應(yīng)是否能和非版一樣,每當(dāng)狀態(tài)改變的時(shí)候就重新渲染組件的整個(gè)子樹,讓大家懷疑這會(huì)不會(huì)對(duì)性能造成負(fù)面影響。 當(dāng)大家考慮在項(xiàng)目中使用 React 的時(shí)候,第一個(gè)問題往往是他們的應(yīng)用的速度和響應(yīng)是否能和非 React 版一樣,每當(dāng)狀態(tài)改變的時(shí)候就重新渲染組件的整個(gè)子樹,讓大家懷疑這會(huì)不會(huì)對(duì)性能造成負(fù)面影響。React 用了一些黑...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 2429·2023-04-26 00:46
閱讀 587·2023-04-25 21:36
閱讀 733·2021-11-24 10:19
閱讀 2278·2021-11-23 09:51
閱讀 1024·2021-10-21 09:39
閱讀 837·2021-09-22 10:02
閱讀 1673·2021-09-03 10:29
閱讀 2699·2019-08-30 15:53