You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React MUI Datatables:合并除时间外值相同的行并显示最后一条

在React MUI Datatables中保留重复行的最后一条数据

要实现只保留除时间字段外其余字段相同行的最后一条(时间最晚的记录),核心思路是先预处理数据,再将处理后的结果传给表格组件渲染,具体步骤如下:

1. 预处理原始数据

遍历原始数据,根据除时间外的字段生成唯一标识,只保留每个标识下时间最晚的行。示例代码如下:

// 示例原始数据
const rawData = [
  { id: 1, name: "张三", value: 100, time: "2024-01-01 10:00" },
  { id: 2, name: "张三", value: 100, time: "2024-01-01 11:00" },
  { id: 3, name: "李四", value: 200, time: "2024-01-01 09:00" },
];

// 数据去重处理函数:保留同组内时间最晚的行
const filterLatestRows = (data) => {
  const uniqueMap = {};

  data.forEach(row => {
    // 生成唯一键:排除time字段,拼接其余字段值作为分组标识
    const uniqueKey = Object.keys(row)
      .filter(key => key !== 'time')
      .map(key => row[key])
      .join('|'); // 用特殊字符分隔,避免字段值拼接冲突

    // 对比时间,更新为最新的行
    if (!uniqueMap[uniqueKey] || new Date(row.time) > new Date(uniqueMap[uniqueKey].time)) {
      uniqueMap[uniqueKey] = row;
    }
  });

  // 将处理后的对象转为数组返回
  return Object.values(uniqueMap);
};

// 得到去重后的数据集
const filteredData = filterLatestRows(rawData);

2. 传入MUI Datatables渲染

将预处理后的filteredData直接传给表格组件,正常配置列和选项即可:

import MUIDataTable from "mui-datatables";

// 表格列配置
const columns = [
  { name: "id", label: "ID" },
  { name: "name", label: "姓名" },
  { name: "value", label: "数值" },
  { name: "time", label: "时间" },
];

// 表格选项配置(按需调整)
const tableOptions = {
  pagination: true,
  sort: true,
  filter: true,
};

export default function DataTable() {
  return (
    <MUIDataTable
      title="业务数据"
      data={filteredData}
      columns={columns}
      options={tableOptions}
    />
  );
}

注意事项

  • 如果行中包含对象类型的字段,生成uniqueKey时要用JSON.stringify()处理该字段,避免拼接错误
  • 若时间字段格式非标准(如时间戳),需调整时间对比逻辑,确保能正确判断先后顺序
  • 数据量较大时,建议后端直接返回去重后的结果,减少前端计算压力

内容的提问来源于stack exchange,提问作者Joanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:55:21