【immutable学习记录】immutable对象和原生对象的相互转换


什么是immutable

Immutable Data 就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。

其中有 3 种最重要的数据结构:

Map:键值对集合,对应于 Object,ES6 也有专门的 Map 对象
List:有序可重复的列表,对应于 Array
Set:无序且不可重复的列表

immutable对象和原生对象的相互转换

// 原生对象转 immutable 对象     ----------  支持各种嵌套
// fromJS() 能够把原生的数组或者对象转换成对应的 List 或者 Map
const immutable = require('immutable')
const map = immutable.fromJS({
    x: 1, y: 2, z: 3, xyz: {
        good: 123
    }
})
console.log('map:', map)
// 输出结果为:{'x': 1, 'y': 2, 'z': 3, 'xyz': Map {'good': 123} }

const list = immutable.fromJS([1, 2, 3], [44, 55, 66])
console.log('list:', list)
// 输出结果:[1,2,3, List [44,55,66] ]

const list_map = immutable.fromJS([1, 2, 3], [
    { x: 1, y: 2 },
    { a: 3, b: 4 }
])
console.log('list_map:', list_map)
// 输出结果:[1,2,3, Map [{'x':1,'y':2}, Map[{'a':3, 'b': 4}]] ]

// immutable 对象转 原生对象     ----------  支持各种嵌套
// toJS() 转换为原生对象
//        List -> 数组
//        Set  -> 数组
//        Map  -> 对象
const {List, Map, Set} = require('immutable')
const ls = List([1,2,3,4])
const arr1 = ls.toJS(ls)
console.log('arr1:', arr1)
// 输出结果:[1,2,3,4]

const mp = Map({x:1,y:2})
const obj = mp.toJS(mp)
console.log('obj:', obj)
// 输出结果:{'x':1,'y':2}

const st = Set([11,22,33,22]);
const arr2 = st.toJS(st)
console.log('arr2:', arr2)
// 输出结果:[11,22,33]  ----- 先去重再转换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值