Map 用于建立“图表配置项”与“图表实例”的映射关系,支持以容器 ID 或语义化 key 为键存储 {option, instance} 对象,便于动态更新、复用和清理,并可扩展缓存响应式配置。

在数据可视化中,用 Map 建立“图表配置项”与“图表实例”的映射关系,核心是把每个唯一标识(如图表容器 ID、自定义 key)作为键,把对应的配置对象和实例对象作为值存进去,便于后续动态更新、销毁或复用。
用容器 ID 作 key,统一管理多个 ECharts 实例
常见场景是页面上有多个 <div id="chart1">、<div id="chart2">,需要分别初始化并维护它们的配置和实例。
- 创建一个全局
Map,例如const chartMap = new Map() - 初始化时,以容器 ID 为键,存入
{ option, instance }对象:chartMap.set('chart1', { option: myOption, instance: echarts.init(document.getElementById('chart1')) }) - 后续更新图表时,直接查 Map:
const item = chartMap.get('chart1'); if (item) item.instance.setOption(item.option)
用业务 key 区分同一容器下的多套配置
有些场景下,一个容器要切换不同主题/维度的图表(比如“销售额月度图”和“用户地域分布图”),这时不宜用 ID 做 key,而应设计语义化 key。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如用
'sales/monthly'、'users/region'作为键名 - 存入时可带元信息:
chartMap.set('sales/monthly', { option, instance, type: 'line', lastUpdated: Date.now() }) - 切换时先检查是否存在,避免重复 init:
if (!chartMap.has(key)) { chartMap.set(key, { option, instance: echarts.init(el) }) }
配合生命周期,自动清理无用实例
单页应用中频繁创建/销毁图表容易导致内存泄漏,Map 可配合卸载逻辑做清理。
立即学习“Java免费学习笔记(深入)”;
- 在组件
unmounted或beforeDestroy钩子中遍历 Map 清理:chartMap.forEach(({ instance }, key) => { instance?.dispose(); chartMap.delete(key) }) - 也可封装成方法,按前缀批量删除:
[...chartMap.keys()].filter(k => k.startsWith('dashboard/')).forEach(k => chartMap.delete(k))
扩展:支持响应式配置合并与缓存
如果配置项会随状态变化(如筛选条件改变),可用 Map 缓存已生成的配置,避免重复计算。
- 用 JSON 字符串化参数生成 cacheKey:
const cacheKey = JSON.stringify({ dateRange, metric }) - 查 Map 中是否已有对应配置:
let cached = chartMap.get(cacheKey); if (!cached) { cached = generateOption(...); chartMap.set(cacheKey, cached) } - 注意:JSON.stringify 对函数、undefined、Date 等不友好,生产环境建议用
fast-deep-equal或自定义 key 生成策略

















