筆記, immutable-js 基礎操做

這篇文章是 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

List

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

排序, 有 sortsortBy:

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

Map

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 遷移主要用這兩個數據結構然而文檔中提供的數據結構很是多, 記得本身看文檔, 咱們還有大量未探索的

相關文章
相關標籤/搜索