前端表格数据去重应在插入dom前完成清洗:基本类型用set,对象数组按字段用map或reduce,多字段组合用复合键,去重后批量渲染以减少dom操作。

在前端渲染表格前对数据去重,关键不是“先渲染再删”,而是**拿到原始数据后、插入 DOM 前完成清洗**。核心在于:区分数据类型(基本值 or 对象)、明确去重依据(全等 or 某字段)、兼顾性能与可读性。
基础数组(数字/字符串)直接用 Set
这是最简、最快的方式,适合纯文本或 ID 列表:
- 一行代码搞定:const uniqueData = [...new Set(originalArray)]
- 自动去重且保持首次出现顺序
- 注意:1 和 "1" 被视为不同值,符合 JS 类型安全逻辑
对象数组按指定字段去重(如 id、name)
不能直接用 Set,因为对象引用不同即视为不同。需借助 Map 或 reduce 提取唯一键:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐 Map 方案(性能好、逻辑清晰):
const uniqueByField = Array.from(new Map(data.map(item => [item.id, item])).values()) - 也可用 reduce + includes(语义直观):
data.reduce((acc, cur) => acc.some(i => i.id === cur.id) ? acc : [...acc, cur], []) - 避免 JSON.stringify —— 它依赖属性顺序,且对函数、undefined、Date 等不友好
多字段组合去重(如 name + email 同时相同才算重复)
构造复合唯一键,再走 Map 路线:
- 生成 key 示例:`${item.name}|${item.email}`
- 完整写法:
const map = new Map();
data.forEach(item => { const key = `${item.name}|${item.email}`;
if (!map.has(key)) map.set(key, item); });
const uniqueData = Array.from(map.values()); - 竖线 | 是常见分隔符,确保不会因内容含分隔符导致误判(必要时可用更安全的编码)
去重后立即渲染,不触发额外重排
别在循环里反复 innerHTML 或 appendChild。建议一次性构建完整 HTML 字符串,或用 DocumentFragment:
- 批量生成 tr 字符串,最后赋给 tbody.innerHTML
- 或创建 fragment,逐个 append tr,再一次性 append 到 tbody —— 减少 DOM 操作次数
- 确保去重逻辑在 fetch.then() 或数据加载回调中完成,早于渲染步骤
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










