js数据结构类型扩展:immutable-js与java、.net等强类型语言相比,js有一个很大的不同,就是数据结构只有数组和对象,都是动态可变的,而java有List、Set、Map等数据结构。因此,为了在js中使用这些数据结构,immutable-js应运而生。1.immutable-jsimmutable-js使用不可变集合扩展JavaScript,数据类型一旦创建就无法更改。这简化了应用程序开发、无防御复制、启用更高级的内存方案,并使用更简单的逻辑检查更新。持久数据提供可修改的API,这些API不会就地更新数据,但会产生新的更新数据。2.提供的数据类型List:有序索引集合,类似于JavaScript中的ArrayMap:无序键值对((键,值)对)集合OrderedMap:有序MapSet:无重复值的集合OrderedSet:有序SetStack:一个索引集合支持添加和删除元素Range():返回一个Seq.Indexed集合,从头到尾填充了一个步长。start默认值为0,step默认值为1,end默认值为infinity。如果start=end,则返回一个空集合。Repeat():返回一个Seq.Indexed集合,重复次数为value。如果times未定义,则返回无限值的Seq集合。Record:类似于JavaScript的Object,但只接受特定的字符串作为key,并有默认值Seq:允许惰性操作,允许高阶集合函数(如map,filter)高效链接,无需经过中间集合Collection:All数据结构的基类更多数据类型参考immutable-js-docs.3。fromJS提供的API3.1:将一个js数据转为immutable-js类型的数据const{fromJS,isKeyed}=require('immutable@4.0.0-rc.9');fromJS({a:{b:[10,20,30]},c:40},function(key,value,path){console.log(key,value,path)返回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.3.2is:comparetwoobjectsconst{Map,is}=require('immutable@4.0.0-rc.9')constmap1=Map({a:1,b:1,c:1})constmap2=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。3.3更多API请参考immutable-js-docs.4。关注更多博文,见https://github.com/senntyou/blogs作者:沉育之(@senntyou)版权声明:自由转载-非商业-非衍生-保留署名(CreativeCommons3.0许可)
