首页 > 其他分享 >nz-table数据动态横向合并

nz-table数据动态横向合并

时间:2023-10-11 16:22:18浏览次数:37  
标签:code project1 json 横向 nz rowSpan let table data

 

原文链接: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 > <thead> <tr> <th>姓名</th> <th>学号</th> <th>科目1</th> <th>科目2</th> <th>科目3</th> </tr> </thead> <tbody> <tr *ngFor="let data of basicTable1.data; index as i"> <td [rowSpan]="data.rowSpan" *ngIf="data.secondIndex == 0">{{ data.name }}</td> <td [rowSpan]="data.rowSpan" *ngIf="data.secondIndex == 0">{{ data.code }}</td> <td>{{data.project1}}</td> <td>{{data.project2}}</td> <td>{{data.project3}}</td> </tr> </tbody> </nz-table>

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

 

标签:code,project1,json,横向,nz,rowSpan,let,table,data
From: https://www.cnblogs.com/longkui-site/p/17757476.html

相关文章

  • 使用jquery的html()判断Table元素为空时的bug
    在使用jquery的html()函数判断接点为空时从服务器端取数据,不为空时则不再取数据,这样减少与服务器的交互。使用元素<divid="test"></div>使用if(!$("#test").html())判断没有问题使用<tableid="test"></table>时出现问题,判断时总不为空,用alert($("#t......
  • Non-terminating decimal expansion; no exact representable decimal result.
    上网查了一下这个异常的,找到了原因所在:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常:java.lang.ArithmeticException:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult. 解决的办法就是给divide方法设置精确的小......
  • DataGridView绑定DataTable的建议方式
    DataGridView绑定DataTable的建议方式1.将DataTable绑定到BindingSource2.将BindingSource绑定到DataGridView3.DataGridView修改完要从Datatable取值时,同步过去时,BindingSource和DataGridView两个都要执行EndEdit()publicpartialclassForm1:Form{D......
  • 模型视图简介、QListWidget、QTreeWidget、QTableWidget、QStringListModel、QFileSys
    一、模型视图简介   有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的Qt要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改的地方写回,然后......
  • C# DataTable使用方法详解
    在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。1、添加引用1using System.Data;2、创建表1234//创建一个空表DataTabledt=n......
  • VTable——不只是高性能的多维数据分析表格
    导读VTable:不只是高性能的多维数据分析表格,更是行列间创作的方格艺术家!VTable是字节跳动开源可视化解决方案VisActor的组件之一。在现代应用程序中,表格组件是不可或缺的一部分,它们能够快速展示大量数据,并提供良好的可视化效果和交互体验。VTable是一款基于可视化渲染引擎......
  • 题解 - CF1972E - Divisors and Table
    这题正解是虚树,本解法卡常,仅适合不会虚树的。(例如本人)注意:下文中根节点深度定义为1.第一步:转化问题我们把$g(x,y,z)$拆开,考虑每个质数是哪些点的因子。包含这个质数的点构成一个点集,我们只需求这个点集S的$\sum\limits_{x,y,z\inS}f(x,y,z)$。第二步:对......
  • JqueryDatatable插件
    注意:要被dataTable处理的table对象,必须有thead与tbody,而且,结构要规整(数据不一定要完整),这样才能正确处理常用参数'bPaginate':true,//是否显示分页'sPaginationType':"full_numbers",//分页的类型'iDisplayLength':50,//每页显示数量'bFilter':false,//是否启动过滤......
  • 【Unity】 ScriptableObject ——生成多个ScriptableObject作为子对象,可以点击展开并
     官方是这么介绍ScriptabelObject的: “ScriptableObject是一个可独立于类实例来保存大量数据的数据容器。ScriptableObject的一个主要用例是通过避免重复值来减少项目的内存使用量。如果项目有一个预制件在附加的MonoBehaviour脚本中存储不变的数据,这将非常有用。每次实......
  • js_mind修改了支持单节点是否可编辑属性editable
    /***@licenseBSD*@[email protected]**ProjectHome:*https://github.com/hizzgdev/jsmind/*/;(function($w){'usestrict';console.warn("Theversionisoutdated.seedetails:https://hizzgdev.git......