这篇文章是 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 迁移主要用这两个数据结构然而文档中提供的数据结构很是多, 记得本身看文档, 咱们还有大量未探索的