原文链接:https://www.longkui.site/program/frontend/nz-table/4865/

先上效果图:

环境:angular+ng-zorro

原理:遍历json数据,对相同的json数据进行计数,然后把相同的json数据统一加上rowspan的长度,然后这些相同的json数据从0开始编号。

原始的json数据:

  let jsonData2=[{code:'153',name:"张三",project1:"21",project2:"31",project3:"11",},{code:'153',name:"张三",project1:"51",project2:"23.1",project3:"52.2",},{code:'154',name:"李四",project1:"52.1",project2:"3",project3:"16",},{code:'156',name:"王五",project1:"83",project2:"31",project3:"8",},{code:'156',name:"王五",project1:"3.3",project2:"2.1",project3:"5.1",},]

然后需要对json数据中的某个字段进行排序。

我们参考前面的一篇文章:angular中对json数据按照某一字段进行排序 – 每天进步一点点 (longkui.site)

doSort(sortName: string, sortValue: string, list: any[], sortType?: string): [] {
const copyList = JSON.parse(JSON.stringify(list));
if (sortName && sortValue) {
return copyList.sort((a, b) => {
return sortValue === ‘ascend’ ? (a[sortName!] > b[sortName!] ? 1 : -1) : b[sortName!] > a[sortName!] ? 1 : -1;
});
} else {
return copyList;
}
}
然后就是我们的核心代码,对排序完毕的代码进行合并操作。

/**

  • 横向合并单元格数据
  • @param data 原始数据
  • @param indexName 要排序的字段也是判断是否分组的字段

*/
mergeData(data,indexName) {
let listOfData = [] //临时数组
if (data == undefined || data.length == 0 || data == null) {
return;
}
data= this.doSort(indexName,“desc”,data)
console.log(data)
let res = [] //结果数组
let rowSpan = 1
for (let i = 0; i < data.length; i++) {
for (let j = i + 1; j < data.length; j++) {
if (data[i][indexName] == data[j][indexName]) {
rowSpan++;
} else {
break;
}
}
//开始复制某组相同的数据
if (rowSpan > 1) {
for (let k = 0; k < rowSpan; k++) {
data[k+i].secondIndex = k;
data[k+i].rowSpan = rowSpan;
res.push(data[k+i])
}
i+=(rowSpan-1) //跳过相同的数据
rowSpan = 1;
} else {
//复制单独的数据
data[i].secondIndex = 0;
data[i].rowSpan = rowSpan;
res.push(data[i])
}
}
console.log(“look==”, res)
return res
}
我们调用的时候直接使用

this.tableData =this.mergeData(jsonData2,“code”)
其中,第二个参数是要排序的字段和要分组的字段

HTML的代码:

<nz-table #basicTable1 [nzData]=“tableData” nzBordered >

姓名
学号
科目1
科目2
科目3

<tr *ngFor=“let data of basicTable1.data; index as i”>
<td [rowSpan]=“data.rowSpan” *ngIf=“data.secondIndex == 0”>{{ data.name }}
<td [rowSpan]=“data.rowSpan” *ngIf=“data.secondIndex == 0”>{{ data.code }}
{{data.project1}}
{{data.project2}}
{{data.project3}}

这样,就可以实现动态的合并行数据了。

nz-table数据动态横向合并相关推荐

  1. 如何在 Excel 里将两部分数据进行横向合并(即 Outer Join)?

    不通过编程,实现 Excel 数据的 Outer Join 合并.总体思路是先从两块数据中找出具备相同内容的列作为 Key 列,然后把两块数据的 Key 列内容纵向串接在一起,找出重复值并删除相应的行 ...

  2. vue复杂表格单元格合并 根据数据动态合并

    我们在开发中最常见的就是表格,而往往有一些复杂表格都不大好实现,对于合并单元格不是固定的,而是需要根据数据是否相同去动态设置合并的表格,本文把方法分享给大家,可以根据数据动态生成合并单元格,无论导出需 ...

  3. SPSS教程——进行数据的纵向和横向合并

    众所周知要对数据进行分析,首先要做的是对数据进行收集.这就造成了数据的来源往往是多方面的,我们必须要把数据合并到一个文件中才能进行分析,本文我将在IBM SPSS Statistics中教大家两种数据 ...

  4. chatgpt赋能python:Python数据拼接横向--实现数据重组的简单方式

    Python数据拼接横向 --实现数据重组的简单方式 数据处理是现代企业生产力的核心,如今,大数据技术的发展和应用,让数据分析和数据处理变得更加高效和精确了.Python作为一种高级编程语言,得到了广 ...

  5. vue获取table一列数据_VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)...

    一.问题 用elementUi横着增加一行数据没毛病,可以操作 添加一列,这新增的这一列, 第一次去赋值的时候值是改了, 但没生效 点击下一行时 值就变过来 二.原因 横向添加 是复制上面的某一条数据 ...

  6. antd table合并行或者列(动态添加合并行、列)

    antd table合并行或者列(动态添加合并行.列) 表头只支持列合并,使用 column 里的 colSpan 进行设置. 表格支持行/列合并,使用 render 里的单元格属性 colSpan ...

  7. R语言数据横向合并cbind函数实战

    R语言数据横向合并cbind函数实战 目录 R语言数据横向合并cbind函数实战 #基本语法 # cbind横向为dataframe添加新的列

  8. ABAP动态生成经典应用之Table数据Upload 程序

    开发说明:在CBO的程序开发过程中,需要为Table准备大量的测试数据,手动录入效率低,不专业,我们可以采用其他的高级编辑工具(例如:EXCEL,EditPlus)按照Table数据存储结构准备好数据 ...

  9. jquery table ajax,JQuery Ajax动态加载Table数据的实例讲解

    我们在jsp定义一个select和一个table,要求实现根据select的选值,动态加载table数据. table第一次加载数据的function定义如下: function loadData() ...

最新文章

  1. 【面试必备】javascript的原型和继承
  2. matlab做拉普拉斯反演,拉普拉斯变换反演
  3. 分享几个超好用的矢量图标网站
  4. ETC和车联网安全认证的基本原理的分析和比较
  5. java协同过滤算法的演唱会门票售票系统
  6. html写樱花树,写樱花树的作文
  7. Pyramidal Convolution Rethinking Convolutional Neural Networks for Visual Recognition
  8. 续:Windows Vista操作系统最新安全特性分析:改进和局限 (下)
  9. 数据可视化——彩色通用设计之色彩搭配(制作对色盲人群友好的图形和演示)
  10. 微服务实施笔记(一)
  11. f4v转换器怎么将f4v格式转换为flv格式
  12. Kubernetes系列教程(三)---纯三层网络方案
  13. 什么是Google Ads?
  14. 【计算机网络实验】动态路由协议——华为eNSP(详细实验报告+代码)
  15. 测试emmc读写速度软件,真机闪存实测:闪存读取速度到底什么鬼差距有多大建议收藏...
  16. Redis管理工具CacheCloud的部署与使用
  17. Rstudio读取csv文件
  18. Windows生产力工具分享
  19. 高新企业认定的8大领域是哪些?
  20. 【TypeScript】深入学习TypeScript命名空间

热门文章

  1. html 感叹号代码,HTML电子邮件中的感叹号
  2. Leetcode187-Repeated DNA Sequences
  3. JavaScript限时秒杀
  4. XILINX DDR4 SDRAM(MIG)笔记2(基于VU9P FPGA)
  5. Mask R-CNN 训练自己的数据集(balloon过程+报错解释)
  6. Android气泡弹幕,Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕...
  7. 关于DMA,TCM(ITCM和DTCM)和Cache
  8. 软件开发怎么对抗抄袭_对抗软件开发中的复杂性
  9. 海拔4000米计算机设备,普通笔记本海拔4000米以上就不灵了,西藏只能带固态硬盘笔记本!...
  10. java静态成员和非静态成员的区别