相对 java
、.net
之类的强类型语言,js
有一点很大的区别就是,数据结构只有 array
与 object
,并且都是动态可变的,而 java
有 List, Set, Map
等数据结构。所以,为了能在 js
中也使用这些数据结构,immutable-js 就应运而生。
1. immutable-js
immutable-js
扩充了 JavaScript 中的不可变集合,即一旦创建就不能改变的数据类型。这样可简化应用开发、无防御复制、启用更先进的内存方案,以及使用更简单的逻辑检查更新。持久化数据提供可修改的 API,这些 API 不在原地更新数据,而是产生新的更新后的数据。
List
: 有序索引集合,类似 JavaScript 中的 ArrayMap
: 无序键值对((key, value) pairs)集合OrderedMap
: 有序的Map
Set
: 无重复值的集合OrderedSet
: 有序的Set
Stack
: 支持元素添加和移除的索引集合Range()
: 返回一个从start
到end
,步长step
填充的Seq.Indexed
集合,start
默认值为0
,step
默认值为1
,end
默认为无穷大。如果start = end
,则返回空集合。Repeat()
: 返回一个用value
重复times
次的Seq.Indexed
集合。如果times
未定义,则返回无限value
值的Seq
集合。Record
: 类似于 JavaScript 的 Object,但是只接收特定字符串为key
,并有默认值Seq
: 允许不通过中间集合让高阶集合函数(如map, filter
)高效链式调用的惰性操作集合Collection
: 所有数据结构的基类
更多数据类型参考 immutable-js - docs.
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.
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.
更多 API 参考 immutable-js - docs.
更多博客,查看 https://github.com/deepraining/blogs
版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)