這篇文章是 immutable-js
一些操做的整理, 目前只有基本的操做:
文檔請查看: http://facebook.github.io/imm...
使用過程當中遇到的寫法我會不會增長在後邊.git
JavaScript 當中不可變數據有點不適應, 須要借鑑一些 Haskell 中的內容:
http://learnyouahaskell.com/c...
https://leanpub.com/purescrip...github
更新:數組
六月份到十月份, 咱們完成了不可變數據的重構
配合簡聊的巨大的單一 store, 能夠整理出來一些經常使用的方法
示例代碼用的是 CoffeeScript數據結構
從 JavaScript 數據生成不可變對象(支持數據嵌套):ui
Immutable.fromJS([1,2]) Immutable.fromJS({a: 1})
從 JavaScript 數據生成不可變對象(不支持數據嵌套):code
Immutable.List([1,2]}) Immutable.Map({a: 1})
從不可變數據生成 JavaScript 對象對象
immutableData.toJS()
判斷兩個數據結構是否相等:排序
Immutable.is immutableA, immutableB
判斷兩個數據引用是否一致(shallow equal):索引
immutableA is immutableB
Immutable.List() # 空 List Immutable.List([1,2]) Immutable.fromJS([1,2])
查看 List 的大小:ip
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 <= 1
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 遷移主要用這兩個數據結構然而文檔中提供的數據結構很是多, 記得本身看文檔, 咱們還有大量未探索的