Immutable.js学习记录

本文介绍了Immutable.js,一种用于处理不可变数据的库,它通过持久化数据结构和结构共享来提高性能。文章详细讨论了其优缺点,如节省内存、历史追溯,以及学习曲线和包大小的挑战。此外,还列举了Immutable.js的一些常见API,包括数据转换、比较和操作。
摘要由CSDN通过智能技术生成

一、什么是Immutable.js(不可变数据)

先来看看常见的对象深拷贝问题:

var obj = { a: 1 };
var copy_obj = obj;
copy_obj.a = 2;
console.log(obj.a); // 2  对象属于引用类型,改变新复制的对象的值,会导致原对象值一起改变

解决深拷贝问题常用的方法有:
循环遍历、JSON.stringify与JSON.parse来回转化等方式。

但如果需要频繁地操作一个复杂对象,每次都完全深拷贝一次的话效率太低了。大部分场景下都只是更新了这个对象一两个字段,其他的字段都不变,对这些不变的字段的拷贝明显是多余的。此时使用immutable操作数据的优势凸显而出。

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

在这里插入图片描述

二、Immutable.js的优缺点

优点:

  • 节省内存
  • 历史追溯性
  • 节省内存
  • 拥抱函数式编程

缺点:

  • 容易与原生对象混
  • 增加资源包大小
  • 学习新的api

三、Immutable.js常用api接口

  1. 原生js转换为immutable格式的Data
Immutable.fromJS([1,2]) // 数组转为list类型
Immutable.fromJS({a: 1}) // 对象转为map类型
  1. immutable转换为原生js格式的Data
immutableData.toJS() 
  1. 判断两个immutable数据是否一致
Immutable.is(immutableA, immutableB)
  1. 判断是不是map或List
Immutable.Map.isMap(x)  // 是否是Immutable的map类型(原生js的对象类型)
Immutable.Map.isList(x) // 是否是Immutable的List类型(原生js的数组类型)
  1. 对象合并(同类型)
immutableMapB = immutableMapA.merge(immutableMaC)
  1. map类型的增删改查
// 查
immutableData.get('a') // {a:1} 得到1。
immutableData.getIn(['a', 'b']) // {a:{b:2}} 得到2。访问深层次的key

//增和改(不会改变原来的值,返回新的值)
immutableData.set('a', 2) // {a:1} 得到1。
immutableData.setIn(['a', 'b'], 3)  // {a:{b:2}} 得到{a:{b:3}}。修改深层次的key

immutableData.update('a',function(x){return x+1})
immutableData.updateIn(['a', 'b'],function(x){return x+1})

//删
immutableData.delete('a')
immutableData.deleteIn(['a', 'b'])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值