一、作用:对数据进行深拷贝,修改拷贝后新数据不会影响旧数据,与其他的深拷贝方法对比,性能更好,不用去复制每个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 等