一、fromJS
- 作用:是最最常用的将原生JS数据转换为
ImmutableJS数据的转换方法,默认将原生JS的Array转为List,Object转为Map
Immutable.fromJS({ |
二、toJS
- 作用:将一个
Immutable数据转换为JS类型的数据 - 用法:
value.toJS()
三、is
- 作用:对两个对象进行比较
- 用法:
is(map1,map2)
import { Map, is } from 'immutable' |
四、List 和 Map
4.1 创建
List有序索引密集的集合,和JS中的Array很像Map无序索引集,类似JavaScript中的Object
4.2 判断
List.isList()和Map.isMap()判断一个数据结构是不是List/Map类型
4.3 长度
4.3.1 size 获取List/Map的长度**
// list |
4.3.2 count()
// map |
4.4 数据读取
4.4.1 get() 、 getIn()
获取数据结构中的数据
4.4.2 has() 、 hasIn()
判断是否存在某一个
key
Immutable.fromJS([1,2,3,{a:4,b:5}]).has('0'); //true |
4.4.3 includes()
判断是否存在某一个
value
Immutable.fromJS([1,2,3,{a:4,b:5}]).includes(2); //true |
4.4.4 first() 、 last()
用来获取第一个元素或者最后一个元素,若没有则返回
undefined
Immutable.fromJS([1,2,3,{a:4,b:5}]).first()//1 |
4.5 数据修改
4.5.1 set()
设置第一层
key、index的值
/ Map |
4.5.2 setIn()
设置深层结构中某属性的值
// Map |
4.5.3 deleteIn()
用来删除深层数据,用法参考
setIn
4.5.4 更新 update()
对对象中的某个属性进行更新,可对原数据进行相关操作
////List |
4.5.5 clear()
清除所有数据
Map({ key: 'value' }).clear() //Map |
4.6 List中的删除与插入
4.6.1 数组方法
List对应的数据结构是js中的数组,所以数组的一些方法在Immutable中也是通用的,比如push,pop,shift,unshift,insert
push():在List末尾插入一个元素pop(): 在List末尾删除一个元素unshift: 在List首部插入一个元素shift: 在List首部删除一个元素insert:在List的index处插入元素
List([ 0, 1, 2, 3, 4 ]).insert(6, 5) //List [ 0, 1, 2, 3, 4, 5 ] |
4.7 关于merge
merge浅合并,新数据与旧数据对比,旧数据中不存在的属性直接添加,旧数据中已存在的属性用新数据中的覆盖mergrWith自定义浅合并,可自行设置某些属性的值mergeIn对深层数据进行浅合并mergeDeep深合并,新旧数据中同时存在的的属性为新旧数据合并之后的数据mergeDeepIn对深层数据进行深合并mergrDeepWith自定义深合并,可自行设置某些属性的值
这里用一段示例彻底搞懂
merge,此示例为Map结构,List与Map原理相同
const Map1 = Immutable.fromJS({a:111,b:222,c:{d:333,e:444}}); |
4.8 序列算法
4.8.1 concat()
对象的拼接,用法与
js数组中的concat()相同,返回一个新的对象
const List = list1.concat(list2) |
4.8.2 map()
遍历整个对象,对
Map/List元素进行操作,返回一个新的对象
Map({a:1,b:2}).map(val=>10*val) |
4.8.3 mapKey()
Map特有的mapKey()遍历整个对象,对Map元素的key进行操作,返回一个新的对象
Map({a:1,b:2}).mapKey(val=>val+'l') |
4.8.4 mapEntries
Map特有的mapEntries()遍历整个对象,对Map元素的key和value同时进行操作,返回一个新的对象。Map的map()也可实现此功能
Map({a:1,b:2}).map((key,val)=>{ |
4.8.5 filter
过滤 filter返回一个新的对象,包括所有满足过滤条件的元素- 还有一个
filterNot()方法,与此方法正好相反
Map({a:1,b:2}).filter((key,val)=>{ |
4.8.6 reverse
作用:将数据的结构进行反转
Immutable.fromJS([1, 2, 3, 4, 5]).reverse(); // List [5,4,3,2,1] |
4.8.7 sort & sortBy
排序 sort & sortBy作用:对数据结构进行排序
///List |
4.8.8 groupBy
分组 groupBy作用:对数据进行分组
const listOfMaps = List([ |
4.9 查找数据
4.9.1 indexOf lastIndexOf
Map不存在此方法 和
js数组中的方法相同,查找第一个或者最后一个value的index值,找不到则返回-1
Immutable.fromJS([1,2,3,4]).indexof(3) //2 |
4.9.2 findIndex() 、 findLastIndex()
Map不存在此方法,查找满足要求的元素的index值
Immutable.fromJS([1,2,3,4]).findIndex((value,index,array)=>{ |
4.9.3 find() 、 findLast()
查找满足条件的元素的
value值
Immutable.fromJS([1,2,3,4]).find((value,index,array)=>{ |
4.9.4 findKey() 、 findLastKey()
查找满足条件的元素的
key值
Immutable.fromJS([1,2,3,4]).findKey((value,index,array)=>{ |
4.9.5 findEntry() 、 findLastEntry()
查找满足条件的元素的键值对
key:value
Immutable.fromJS([1,2,3,4]).findEntry((value,index,array)=>{ |
4.9.6 keyOf() lastKeyOf()
查找某一个
value对应的key值
Immutable.fromJS([1,2,3,4]).keyOf(2) //1 |
4.9.7 max() 、 maxBy()
查找最大值
Immutable.fromJS([1, 2, 3, 4]).max() //4 |
4.9.8 min() 、 minBy()
查找最小值
Immutable.fromJS([1, 2, 3, 4]).min() //1 |
4.10 创建子集
4.10.1 slice()
和原生
js中数组的slice数组一样,包含两个参数,start和end,start代表开始截取的位置,end代表结束的位置,不包括第end的元素。若不包括end,则返回整个对象,若end为负数,则返回(start,length-end)对应的数据。若start只有一个并且为负数,则返回最后的end个元素
Immutable.fromJS([1, 2, 3, 4]).slice(0); //[1,2,3,4] |
4.10.2 rest()
返回除第一个元素之外的所有元素
Immutable.fromJS([1, 2, 3, 4]).rest()//[2,3,4] |
4.10.3butLast()
返回除最后一个元素之外的所有元素
Immutable.fromJS([1, 2, 3, 4]).rest()//[1,2,3] |
4.10.4 skip()
有一个参数
n, 返回截掉前n个元素之后剩下的所有元素
Immutable.fromJS([1, 2, 3, 4]).skip(1)//[2,3,4] |
4.10.5 skipLast()
有一个参数
n, 返回截掉最后n个元素之后剩下的所有元素
Immutable.fromJS([1, 2, 3, 4]).skip(1)//[1,2,3] |
4.10.6 skipWhile()
返回从第一次返回
false之后的所有元素
Immutable.fromJS([1, 2, 3, 4]).skipWhile(list.skipWhile((value,index,list)=>{ |
4.10.7 take()
有一个参数n, 返回前n个元素
Immutable.fromJS([1, 2, 3, 4]).take(2)//[1,2] |
4.10.8 takeLast()
有一个参数n, 返回最后n个元素
Immutable.fromJS([1, 2, 3, 4]).takeLast(2)//[3,4] |
4.10.9 takeWhile()
返回从第一次返回
false之前的所有元素
Immutable.fromJS([1, 2, 3, 4]).skipWhile(list.takeWhile((value,index,list)=>{ |
4.11 处理数据
4.11.1 reduce()
和
js中数组中的reduce相同,按索引升序的顺序处理元素
Immutable.fromJS([1,2,3,4]).reduce((pre,next,index,arr)=>{ |
4.11.2 reduceRight()
和
js中数组中的reduce相同,按索引降序的顺序处理元素
Immutable.fromJS([1,2,3,4]).reduceRight((pre,next,index,arr)=>{ |
4.11.3 every()
作用:判断整个对象总中所有的元素是不是都满足某一个条件,都满足返回`true,反之返回false
Immutable.fromJS([1,2,3,4]).every((value,index,arr)=>{ |
4.11.4 some()
判断整个对象总中所有的元素是不是存在满足某一个条件的元素,若存在返回true,反之返回false
Immutable.fromJS([1,2,3,4]).some((value,index,arr)=>{ |
4.11.5 join()
作用:同
js中数组的join方法。把转换为字符串
Immutable.fromJS([1,2,3,4]).join(',') //1,2,3,4 |
4.11.6 isEmpty()
作用:判断是否为空
Immutable.fromJS([]).isEmpty(); // true |
4.11.7 countBy()
与
count不同的是,countBy返回一个对象
const list = Immutable.fromJS([1,2,3,4]); |