摘要:這篇文章是一些操作的整理目前只有基本的操作文檔請查看使用過程中遇到的寫法我會不會增加在后邊當中不可變數據有點不適應需要借鑒一些中的內容更新六月份到十月份我們完成了不可變數據的重構配合簡聊的巨大的單一可以整理出來一些常用的方法示例代碼用的是
這篇文章是 immutable-js 一些操作的整理, 目前只有基本的操作:
文檔請查看: http://facebook.github.io/imm...
使用過程中遇到的寫法我會不會增加在后邊.
JavaScript 當中不可變數據有點不適應, 需要借鑒一些 Haskell 中的內容:
http://learnyouahaskell.com/c...
https://leanpub.com/purescrip...
更新:
六月份到十月份, 我們完成了不可變數據的重構
配合簡聊的巨大的單一 store, 可以整理出來一些常用的方法
示例代碼用的是 CoffeeScript
從 JavaScript 數據生成不可變對象(支持數據嵌套):
Immutable.fromJS([1,2]) Immutable.fromJS({a: 1})
從 JavaScript 數據生成不可變對象(不支持數據嵌套):
Immutable.List([1,2]}) Immutable.Map({a: 1})
從不可變數據生成 JavaScript 對象
immutableData.toJS()
判斷兩個數據結構是否相等:
Immutable.is immutableA, immutableB
判斷兩個數據引用是否一致(shallow equal):
immutableA is immutableBList
Immutable.List() # 空 List Immutable.List([1,2]) Immutable.fromJS([1,2])
查看 List 的大小:
immutableA.size immutableA.count()
判斷是否是 List:
Immutable.List.isList(x)
React 組件 propTypes 判斷是否是 List:
React.PropTypes.instanceOf(Immutable.List).isRequired
獲取 List 索引的元素(負數也是能運行的):
immutableData.get(0) immutableData.get(-1) #反向索引
通過 getIn 訪問嵌套數組當中的數據:
immutableData.getIn [1, 2]
List 更新操作, 也就是創建一個新的 List 數據:
immutableA = Immutable.fromJS([0, 0, [1, 2]]) immutableB = immutableA.set 1, 1 immutableC = immutableB.update 1, (x) -> x + 1 immutableC = immutableB.updateIn [2, 1], (x) -> x + 1
排序, 有 sort 和 sortBy:
immutableData.sort (a, b) -> if a < b then return -1 if a > b then return 1 return 0 immutableData.sortBy (x) -> x
遍歷(返回 false 會終止遍歷):
immutableData.forEach (a, b) -> console.log a, b return true
查找, find 返回第一個匹配值, filter 返回 List:
immutableData.find (x) -> x > 1 immutableData.filter (x) -> x > 1 immutableData.filterNot (x) -> x <= 1Map
Immutable.Map() # 空 Map Immutable.Map({a: 1}) Immutable.fromJS({a: 1})
判斷 Map 的寫法和 List 判斷類似:
Immutable.Map.isMap(x)
獲得 Map 中的數據:
immutableData.get("a")
通過 getIn 訪問嵌套的 Map 中的樹上:
immutableData.getIn ["a", "b"]
更新對象和嵌套的對象:
immutableB = immutableA.set "a", 1 immutableB = immutableA.setIn ["a", "b"], 1 immutableB = immutableA.update "a", (x) -> x + 1 immutableB = immutableA.updateIn ["a", "b"], (x) -> x + 1
合并對象:
immutableB = immutableA.merge(immutableC)
判斷屬性是否存在(undefined 也是存在的):
immutableData = Immutable.fromJS({key: null}) immutableData.has("key")
Map 的 filter 和 List 神似, 返回值 Map:
data = Immutable.fromJS({a: 1, b: 2}) data.filter (value, key) -> value is 1 # => Map {a: 1}
同樣 Map 也可以做一些 reduce 操作, 以及其他的方法, 類似 List:
immutableA.reduce (acc, value, key) -> acc.set key, value , immutable.Map()
獲取 key 和 value 的數組形式:
immutableData.keySeq() immutableData.valueSeq()更多
從 JavaScript JSON Object 遷移主要用這兩個數據結構
然而文檔中提供的數據結構非常多, 記得自己看文檔, 我們還有大量未探索的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85746.html
摘要:張偉輸出結果這樣就實現了在源數據的基礎上更改了值并且輸出一個與之地址完全不同數組。 本來想將有關于immutability-helper的博文放在一起學React系列博文中,但是考慮到該插件不僅僅在React中實用到,所以就單獨拿出來分兩期寫。 發現問題 immutability意為不變,不變性,永恒性。至于該插件能做什么,我想它的作者對它的標注已經很明確了mutate a copy ...
摘要:一向量字典樹字典樹,一種用空間換取時間的樹形數據結構,主要特點是利用字符串的公共前綴來挺升查詢性能。還有最終的數組表示的真實存儲的鍵值,存儲了,存儲了。這其中還有一種節點進行了沖突的處理。 本文受深入探究Immutable.js的實現機制這篇文章啟發,結合自己對Map源碼的解讀,談談我對immutable-js中map數據結構的理解,若有不正確的地方,歡迎指正。 一、Vector Tr...
摘要:數據結構類型擴展相對之類的強類型語言,有一點很大的區別就是,數據結構只有與,并且都是動態可變的,而有等數據結構。所以,為了能在中也使用這些數據結構,就應運而生。擴充了中的不可變集合,即一旦創建就不能改變的數據類型。 js 數據結構類型擴展:immutable-js 相對 java、.net 之類的強類型語言,js 有一點很大的區別就是,數據結構只有 array 與 object,并且都...
摘要:例如維護一份在內部,來判斷是否有變化,下面這個例子就是一個構造函數,如果將它的實例傳入對象作為第一個參數,就能夠后面的處理對象中使用其中的方法上面這個構造函數相比源代碼省略了很多判斷的部分。 showImg(https://segmentfault.com/img/bV27Dy?w=1400&h=544); 博客鏈接:下一代狀態管理工具 immer 簡介及源碼解析 JS 里面的變量類...
閱讀 632·2021-11-22 15:32
閱讀 2720·2021-11-19 09:40
閱讀 2313·2021-11-17 09:33
閱讀 1263·2021-11-15 11:36
閱讀 1864·2021-10-11 10:59
閱讀 1475·2019-08-29 16:41
閱讀 1780·2019-08-29 13:45
閱讀 2150·2019-08-26 13:36