千锋大数据开发学院|不可变数据之Immutable( 二 )


获取immutable中的值:get(key)/getIn(keys)
Map和List的通用方法 , 实现如下import{Map,List}from'immutable';
letstate=Map({
version:'2.0',
user:Map({
username:'laoxie',
age:18,
hobby:List(['代码','电影','唱歌'])
}),
})
//获取version
state.get('version');//2.0
//获取username
state.getIn(['user','username']);//laoxie
//获取hobby属性数据
state.getIn(['user','hobby',1])//电影
注意:和传统的js不同 , getIn()获取深层深套对象的值时不需要做每一层级的判断是否存在 , 如不存在则会返回undefined(JS中如果不判空会报错)添加immutable中的数据:set(key,val)/setIn(keys,val)删除属性:delete(key)/deleteIn(keys)更新属性:update(key,val=>newVal)/updateIn(keys,val=>newVal)如开头所说的 , ImmutableData为不可变数据 , 所有针对immutable的增删改都不会修改原数据 , 而是返回一个新的值 , 所以需要给变量重新赋值 。import{Map,List}from'immutable';
letstate=Map({
version:'2.0',
user:Map({
id:'123',
username:'laoxie',
age:18,
hobby:List(['代码','电影','唱歌'])
}),
})
state.set('version','3.0');
state.get('version');//state不被修改 , 所以还是返回2.0
//正确的修改方式:修改后重新赋值
state=state.setIn(['user','age'],20);
state.getIn(['user','age']);//20
//update , delete操作同上
判断是否存在某个属性:has(key)/hasIn(keys)这应该也是实际开发中是比较常用的方法 , 通过判断属性是否存在来执行不同的操作 , 如可以判断user.id来判断用户是否登录if(state.hasIn(['user','id'])){
//用户已经登录
}else{
//用户未登录
}
判断两个数据是否相等:is(imA,imB)在JS中 , 不管是数据还是对象 , 通过==或===只能判断两个变量的引用地址是否为同一个对象 , 很难判断两个对象的键值是否相等 , 与JS不同 , immutable是对两个对象的hashCode和valueOf进行比较的数据合并:merge()/mergeDeep()还有一个比较常用的操作就是合并数据了 , 在JS我们一般使用Object.assign()来实现 , 但Object.assign()只能做浅合并 , 对层级较深的数据可以使用immutable中使用mergeDeep()来实现 , 两个方法都返回合并后的数据 。constimA=Map({
username:'马云',
money:150000000000,
info:{
married:true,
witticism:'我没见过钱 , 我对钱不感兴趣'
}
})
constimB=Map({
username:'laoxie',
gender:'男',
info:{
married:false,
age:18,
}
})
constnewImData=https://pcff.toutiao.jxnews.com.cn/p/20200914/imA.merge(imB);
console.log(newImData.toJS());
//输出:
//{
//username:'laoxie',
//gender:'男',
//money:150000000000,
//info:{
//married:false,
//age:18,
//}
//}
constnewImData=https://pcff.toutiao.jxnews.com.cn/p/20200914/imA.mergeDeep(imB);
//输出:
//{
//username:'laoxie',
//gender:'男',
//money:150000000000,
//info:{
//married:false,
//age:18,
//witticism:'我没见过钱 , 我对钱不感兴趣'
//}
//}
当然Immutable的方法还有很多 , 本文本只涉及到一引起基本操作 , 如果想要了解跟多数据类型的操作 , 请自行查看官网


推荐阅读