成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端進(jìn)階(11) - js 數(shù)據(jù)結(jié)構(gòu)類型擴(kuò)展:immutable-js

BLUE / 1377人閱讀

摘要:數(shù)據(jù)結(jié)構(gòu)類型擴(kuò)展相對之類的強(qiáng)類型語言,有一點(diǎn)很大的區(qū)別就是,數(shù)據(jù)結(jié)構(gòu)只有與,并且都是動態(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

相對 java.net 之類的強(qiáng)類型語言,js 有一點(diǎn)很大的區(qū)別就是,數(shù)據(jù)結(jié)構(gòu)只有 arrayobject,并且都是動態(tài)可變的,而 javaList, Set, Map 等數(shù)據(jù)結(jié)構(gòu)。所以,為了能在 js 中也使用這些數(shù)據(jù)結(jié)構(gòu),immutable-js 就應(yīng)運(yùn)而生。

1. immutable-js

immutable-js 擴(kuò)充了 JavaScript 中的不可變集合,即一旦創(chuàng)建就不能改變的數(shù)據(jù)類型。這樣可簡化應(yīng)用開發(fā)、無防御復(fù)制、啟用更先進(jìn)的內(nèi)存方案,以及使用更簡單的邏輯檢查更新。持久化數(shù)據(jù)提供可修改的 API,這些 API 不在原地更新數(shù)據(jù),而是產(chǎn)生新的更新后的數(shù)據(jù)。

2. 提供的數(shù)據(jù)類型

List: 有序索引集合,類似 JavaScript 中的 Array

Map: 無序鍵值對((key, value) pairs)集合

OrderedMap: 有序的 Map

Set: 無重復(fù)值的集合

OrderedSet: 有序的 Set

Stack: 支持元素添加和移除的索引集合

Range(): 返回一個從 startend,步長 step 填充的 Seq.Indexed 集合,start 默認(rèn)值為 0,step 默認(rèn)值為 1,end 默認(rèn)為無窮大。如果 start = end,則返回空集合。

Repeat(): 返回一個用 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: 將一個 js 數(shù)據(jù)轉(zhuǎn)換為 immutable-js 類型的數(shù)據(jù)
const { fromJS, isKeyed } = require("[email protected]");
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: 對兩個對象進(jìn)行比較
const { Map, is } = require("[email protected]")
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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97796.html

相關(guān)文章

  • immer.js 簡介及源碼解析

    摘要:例如維護(hù)一份在內(nèi)部,來判斷是否有變化,下面這個例子就是一個構(gòu)造函數(shù),如果將它的實例傳入對象作為第一個參數(shù),就能夠后面的處理對象中使用其中的方法上面這個構(gòu)造函數(shù)相比源代碼省略了很多判斷的部分。 showImg(https://segmentfault.com/img/bV27Dy?w=1400&h=544); 博客鏈接:下一代狀態(tài)管理工具 immer 簡介及源碼解析 JS 里面的變量類...

    Profeel 評論0 收藏0
  • 讀懂immutable-js中的Map數(shù)據(jù)結(jié)構(gòu)

    摘要:一向量字典樹字典樹,一種用空間換取時間的樹形數(shù)據(jù)結(jié)構(gòu),主要特點(diǎn)是利用字符串的公共前綴來挺升查詢性能。還有最終的數(shù)組表示的真實存儲的鍵值,存儲了,存儲了。這其中還有一種節(jié)點(diǎn)進(jìn)行了沖突的處理。 本文受深入探究Immutable.js的實現(xiàn)機(jī)制這篇文章啟發(fā),結(jié)合自己對Map源碼的解讀,談?wù)勎覍mmutable-js中map數(shù)據(jù)結(jié)構(gòu)的理解,若有不正確的地方,歡迎指正。 一、Vector Tr...

    jone5679 評論0 收藏0
  • React性能優(yōu)化

    摘要:當(dāng)大家考慮在項目中使用的時候,第一個問題往往是他們的應(yīng)用的速度和響應(yīng)是否能和非版一樣,每當(dāng)狀態(tài)改變的時候就重新渲染組件的整個子樹,讓大家懷疑這會不會對性能造成負(fù)面影響。 當(dāng)大家考慮在項目中使用 React 的時候,第一個問題往往是他們的應(yīng)用的速度和響應(yīng)是否能和非 React 版一樣,每當(dāng)狀態(tài)改變的時候就重新渲染組件的整個子樹,讓大家懷疑這會不會對性能造成負(fù)面影響。React 用了一些黑...

    n7then 評論0 收藏0
  • 【連載】前端個人文章整理-從基礎(chǔ)到入門

    摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<