主要是两个步骤,

1.处理接口返回数据,给其添加两个属性,一个是合并行数(列数),一个是当前数据的序号

2.在columns结合antd官网的处理方法合并表格

3.尽可能得减少计算量

数据处理函数

/**
* 表单表头合并
* @param list 需要遍历的数组
* @param key 合并依赖的字段名
*/
//主要赋予两个属性,一个是total:该条数据占几行 number:该条数据的序号
export const getTotal = (list, key) => {
let number = 0;
let lastMenber = 0;
list?.map((item, index) => {
if (index !== 0 && index !== list.length - 1) {
if (item[key] != list[index - 1][key]) {
if (number === 0) {
//total表示该数据占几行
list[0].total = index;
lastMenber = index;
} else {
list[lastMenber].total = index - lastMenber;
lastMenber = index;
}
number += 1;
} else {
item.total = 0;
}
} else if (index === list.length - 1) {
if (index !== 0 && item[key] != list[index - 1][key]) {
list[lastMenber].total = list.length - 1 - lastMenber;
item.total = 1;
lastMenber = 0;
number += 1;
} else {
list[lastMenber].total = list.length - lastMenber;
lastMenber = 0;
}
}
//number表示序号
item.number = number;
});
return list;
};

columns(哪些字段需要合并的,就加上render去处理)

const columns = [
{
title: '序号',
dataIndex: 'rowNo',
key: 'rowNo',
render: (text, record, index) => {
const obj = {
children: record.number + 1,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '地址',
dataIndex: 'address',
key: 'address',
render: (text, record) => {
const content = (
<span
style={{ color: '#00aa4f', border: 0, cursor: 'pointer' }}
>
{text}
</span>
);
const obj = {
children: content,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '姓名',
dataIndex: 'name',
key: 'name',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '性别',
dataIndex: '性别',
key: '性别',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '当前状态',
dataIndex: 'status',
key: 'status',
},
{
title: '结果',
dataIndex: 'result',
key: 'result',
},
];

table组件(合并所有姓名相同的数据)

<Table
columns={columns}
dataSource={getTotal(list, 'name')}
></Table>

antd动态的表格合并(包含排序功能)的更多相关文章

  1. [转载]EasyUI中数据表格DataGrid添加排序功能

    我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前 ...

  2. JS动态生成表格后 合并单元格

    JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...

  3. JS实现前台表格排序功能

    JS实现前台表格排序功能 虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二: 一是代码简单:二是前台JS排序对于有分页的情况无法处理. 前段时间,有个功能需 ...

  4. Python实现EXCEL表格的排序功能

    EXCEL的数值排序功能还是挺强大的,升序.降序,尤其自定义排序,能够对多个字段进行排序工作. 那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能, ...

  5. 关于表格合并span-method方法的补充(表格数据由后台动态返回)

    之前写了一些关于element-ui表格合并的方法,不过用的数据都是确定的数据(死数据),但是很多时候我们的数据都是通过后台获得的,数据不稳定,这个时候使用表格合并就需要先处理一下数据,先看一下一种很 ...

  6. QTableWidget表格合并若干问题及解决方法

    Qt提供 QTableWidget作为表格的类以实现表格的基本功能,表格中所装载的每一个单元格由类QTableWidgetItem提供.这是基于表格实现 Qt提供的一个基础类,若想实现定制表格和单元格 ...

  7. MVC5 Entity Framework学习参加排序、筛选和排序功能

    上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...

  8. js如何动态创建表格(两种方法)

    js如何动态创建表格(两种方法) 一.总结 一句话总结: 1.方法一:写好创建表格的html代码,将之赋值给div的innerHTML. 2.方法二.直接用创建好的table元素的方法insertRo ...

  9. EasyUI-DataGrid多线动态实现选择性合并

    jQuery EasyUI有一个非常易于使用的数据列表控件,这是DataGrid控制.某些背景json格式可以传递给在前景中显示的控制,很强大.只要有时需求须要这样即多行合并,如在列表中假设同样的部门 ...

随机推荐

  1. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

  2. 【linux系统】命令学习(五)linux三剑客 grep \ awk \ sed

    grep----基于正则表达式查找满足条件的行 1.内容检索 获取行 grep pattern file 获取内容 grep -o pattern file 获取上下文grep -A -B -C pa ...

  3. 【Git 系列】基础知识全集

    Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具. 一.Git 基础 ...

  4. SpringMVC学习笔记---依赖配置和简单案例实现

    初识SpringMVC 实现步骤: 新建一个web项目 导入相关jar包 编写web.xml,注册DispatcherServlet 编写springmvc配置文件 接下来就是去创建对应的控制类 , ...

  5. app如何测试

    你的app是如何测试?  考虑UI界面测试,在测试主体的功能模块,考虑异常测试,关机,卡死,重启...,  交互性测试,手机常用操作,打电话,短信..,适配性测试,原来我们的公司就买了华为mate8 ...

  6. JDK 动态代理与 CGLIB 动态代理,它俩真的不一样

    摘要:一文带你搞懂JDK 动态代理与 CGLIB 动态代理 本文分享自华为云社区<一文带你搞懂JDK 动态代理与 CGLIB 动态代理>,作者: Code皮皮虾 . 两者有何区别 1.Jd ...

  7. Codeforces 587D - Duff in Mafia(2-SAT+前后缀优化建图)

    Codeforces 题面传送门 & 洛谷题面传送门 2-SAT hot tea. 首先一眼二分答案,我们二分答案 \(mid\),那么问题转化为,是否存在一个所有边权都 \(\le mid\ ...

  8. 对 SAM 和 PAM 的一点理解

    感觉自己学 SAM 的时候总有一种似懂非懂.云里雾里.囫囵吞枣.不求甚解的感觉,是时候来加深一下对确定性有限状态自动机的理解了. 从 SAM 的定义上理解:SAM 可以看作一种加强版的 Trie,它可 ...

  9. javaWeb - 2 — ajax、json — 最后附:后台获取前端中的input type = "file"中的信息 — 更新完毕

    1.ajax是什么? 面向百度百科一下就知道了,这里就简单提炼一下 Ajax即Asynchronous Javascript And XML(异步JavaScript和XML).当然其实我们学的应该叫 ...

  10. 日常Java 2021/11/13

    Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...