immutable的理解与使用

一、作用:对数据进行深拷贝,修改拷贝后新数据不会影响旧数据,与其他的深拷贝方法对比,性能更好,不用去复制每个deepcopy节点,节省内存

二、安装

cnpm i immutable -S

三、使用

        在日常工作中,主要用其中的Map和List方法,很少用formJS,toJS这两个,很浪费性能

const {Map,List, fromJS,toJS} = require('immutable')

四、常用的API

const {Map,List, fromJS,toJS} = require('immutable')
const obj = {
    a:1,
    b:2,
    c:{
        age:12
    }
}
// 1,Map() 将原生js对象转为Map对象
    // const newObj = Map(obj)
// console.log(newObj,obj) //Map对象  , { a: 1, b: 2, c: { age: 12 } }

// 2,set  增
// const newObj = Map(obj).set('d',3)
// console.log(JSON.stringify(newObj),obj) //{"a":1,"b":2,"c":{"age":12},"d":3} { a: 1, b: 2, c: { age: 12 } }
// setIn 增
// const newObj = Map(obj).setIn(['c','name'],'zhangsan')
// console.log(JSON.stringify(newObj),obj) {"a":1,"b":2,"c":{"age":12,"name":"zhangsan"}} { a: 1, b: 2, c: { age: 12 } }

// 3,删 delete deleteIn
// const newObj = Map(obj).delete('b')
// console.log(JSON.stringify(newObj),obj) {"a":1,"c":{"age":12}} { a: 1, b: 2, c: { age: 12 } }
// const newObj = Map(obj).deleteIn(['c','age'])
// console.log(JSON.stringify(newObj),obj) {"a":1,"b":2,"c":{}} { a: 1, b: 2, c: { age: 12 } }

// 3,改 update updateIn
// const newObj = Map(obj).update('b',(x)=>x=4)
// console.log(JSON.stringify(newObj),obj) {"a":1,"b":4,"c":{"age":12}} { a: 1, b: 2, c: { age: 12 } }
// const newObj = Map(obj).updateIn(['c','age'],(x)=>x=4)
// console.log(JSON.stringify(newObj),obj) {"a":1,"b":2,"c":{"age":4}} { a: 1, b: 2, c: { age: 12 } }

// 4,查 get  getIn
// const newObj = Map(obj).get('b')
// console.log(JSON.stringify(newObj),obj)  2 { a: 1, b: 2, c: { age: 12 } }
// const newObj = Map(obj).getIn(['c','age'])
// console.log(JSON.stringify(newObj),obj) 12 { a: 1, b: 2, c: { age: 12 } }

// 5,合并 merge
// const obj2 = {f:13,g:{sex:'男'}}
// const newObj =Map(obj).merge(obj2)
// console.log(JSON.stringify(newObj),obj) {"a":1,"b":2,"c":{"age":12},"f":13,"g":{"sex":"男"}} { a: 1, b: 2, c: { age: 12 } }

// 6,判断长度 count size
// const newObj =Map(obj).size
// console.log(JSON.stringify(newObj),obj) 3 { a: 1, b: 2, c: { age: 12 } }
// const newObj =Map(obj).count()
// console.log(JSON.stringify(newObj),obj)  3 { a: 1, b: 2, c: { age: 12 } }

// 7,判断两个对象是否相等 equals、is:比较值是否相等
// const obj2 = Map({a:1,b:2,c:{age:12}})
// // 判断obj2是否属于Map类型
// // console.log(Map(obj).equals(obj2)) false 注意 当对象中的属性值不为对象为值的时候此时为true
// console.log(obj==obj2) false

// 二、List
const list = [1,2,[3,4]]
// List 将数组转为list类型的数组
// const newList = List(list)
// console.log(newList,list)

const newList = List(list).push(5,6)
console.log(JSON.stringify(newList),list) [1,2,[3,4],5,6] [ 1, 2, [ 3, 4 ] ]

//List() 除push外  还有数组其他方法 如 unshift  concat 等


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值