javascript 的 set 实现动态标签云,核心是利用其自动去重、可迭代、增删高效特性;添加用 add() 一行完成去重,渲染用 array.from() 或扩展运算符转数组,删除用 delete()、清空用 clear(),计数需求则搭配 map 使用。

用 JavaScript 的 Set 实现动态标签云,核心在于利用其自动去重、可迭代、增删高效的特点,让标签添加简洁可靠,无需手动查重或遍历数组。
标签添加:一行代码完成“新增+去重”
Set 在添加重复值时自动忽略,天然适配“用户输入标签 → 加入云中”的场景。只需调用 add() 即可:
- 创建一个全局
Set存储标签(如const tagCloud = new Set();) - 用户提交新标签(字符串)时,直接执行
tagCloud.add(trimmedTag) - 即使多次添加 “前端”、“JavaScript”,
Set内部也只保留一份
实时同步 DOM:从 Set 转为数组渲染
标签云界面需定期更新,而 Set 支持扩展运算符和 Array.from(),转换轻量直观:
- 获取当前全部唯一标签:
Array.from(tagCloud)或[...tagCloud] - 配合
.map()渲染成<span></span>或按钮,例如:{[...tagCloud].map(t => {t})} - 推荐封装一个
renderTagCloud()函数,在每次增删后调用,保证视图与数据一致
支持删除与清空:语义清晰、操作直接
用户点击标签删除时,Set 提供 delete() 和 clear(),比数组 filter() 更精准高效:
- 删除单个标签:
tagCloud.delete("Vue")—— 返回true/false表示是否成功,可用于反馈 - 批量移除多个标签:用
for...of或forEach遍历目标列表逐个delete - 一键清空:
tagCloud.clear(),比arr.length = 0或arr = []更语义化且不影响引用关系
进阶:带计数的标签云?用 Map + Set 组合
若需统计每个标签被添加次数(如热门程度),Set 不适用,但可搭配 Map 构建增强版:
- 用
Map存键值对:new Map().set("React", 3) - 每次添加时:
map.set(tag, (map.get(tag) || 0) + 1) - 仍可用
[...map.keys()]获取所有唯一标签,实现“去重基础 + 计数扩展”双能力










