React Antd 实现表格合计功能
思路:首先拿到 表格数组对象,然后写一个工具类,然后向数组对象最后插入一条数据,这条数据的字段时根据表格数组里合计算出来的。
代码如下,需根据各自业务稍作改动:
<Table dataSource={tableData}columns={columns}pagination={false}/>
const columns = [{title: 'xxx',dataIndex: 'name',key: 'name',align: 'center',},{title: 'yyy',dataIndex: 'yyy',key: '',align: 'center',render: (text, record, rowIndex) => {return (<InputNumber min={0} value={text}onChange={(e) => handleCellChange(rowIndex, 'yyy', e)} />);},]
}
// 每次数据变更计算一次合计const handleCellChange = (rowIndex, dataIndex, value) => {const newTableData = _.cloneDeep(tableData);newTableData[rowIndex][dataIndex] = value;countSum(newTableData, '', 'project');setTableData(newTableData);};// 第一次进来计算一次合计React.useEffect(() => {const newTableData = _.cloneDeep(tableData);countSum(newTableData, '', 'project');setTableData(newTableData);}, []);
合计工具类
/*** 用于表格的合计计算** @param arr 要计算的数组* @param prefix 要计算的数组的对象的前缀* @param sumField 合计字段名字放到哪个字段上* @param accuracy 合计精度* @returns {*}*/
export function countSum(arr, prefix, sumField, accuracy = 4) {if (arr.length === 0) {// 没数据,直接返回return;}// 求和对象let sumObj = {};// 获取到最后一个数据let last = arr[arr.length - 1];if (prefix) {if (last[prefix][sumField] === '合计') {// 已经存在合计了sumObj = last;// 把 sum 的值清空,重新计算sumObj[prefix] = {};sumObj[prefix][sumField] = '合计';} else {sumObj[prefix] = {};sumObj[prefix][sumField] = '合计';arr.push(sumObj); // 在数组末尾添加合计对象}} else {if (last[sumField] === '合计') {// 已经存在合计了last = {};last[sumField] = '合计';arr[arr.length - 1] = last;sumObj = last;} else {sumObj[sumField] = '合计';arr.push(sumObj); // 在数组末尾添加合计对象}}let attrNames;if (prefix) {attrNames = Object.keys(arr[0][prefix]); // 获取数组中所有对象的属性名} else {attrNames = Object.keys(arr[0]); // 获取数组中所有对象的属性名}// -1 代表不累计合计本身的值for (let i = 0; i < attrNames.length - 1; i++) {const attrName = attrNames[i];for (let j = 0; j < arr.length - 1; j++) {let attrValue;if (prefix) {attrValue = arr[j][prefix][attrName];} else {attrValue = arr[j][attrName];}if (typeof attrValue == 'number') {// 只合计数值类型// 将属性值转换为数值类型let attrValueNumber = Number(attrValue).toFixed(4);if (prefix) {sumObj[prefix][attrName] = Number(parseFloat(Number(sumObj[prefix][attrName] || 0) + Number(attrValueNumber)).toFixed(accuracy)); // 求和} else {sumObj[attrName] = Number(parseFloat(Number(sumObj[attrName] || 0) + Number(attrValueNumber)).toFixed(accuracy)); // 求和}}}}
}
相关文章:
React Antd 实现表格合计功能
思路:首先拿到 表格数组对象,然后写一个工具类,然后向数组对象最后插入一条数据,这条数据的字段时根据表格数组里合计算出来的。 代码如下,需根据各自业务稍作改动: <Table dataSource{tableData}column…...
尝试一下Guava带返回值的多线程处理类ListenableFuture
文章目录 ListenableFuture,带返回值的Guava多线程处理工具类举个例子扩展阅读 最近在学习,Java实现异步编程的8种方式这篇博客的时候,没有找到比较好的一个学习demo,故在此整理一下。 ListenableFuture,带返回值的Gua…...
微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID
微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID 问题解决方法 问题 微信开发者工具中调试微信小程序,在开发工具里面调试没问题,但是真机调试的时候报ERR_CERT_AUTHORITY_INVALID错误 解决方法 到这个站点检查域名的Https证书的安全性 : 传送门(注:…...
JCommander + AutoService打造带子命令的Java命令行应用
文章目录 需求Java命令行工具库依赖库定义各个子命令主类CLI测试一下参考文档 需求 最近想将自己的一个Java应用包装成命令行工具,看了几个库,最后选取了JCommander,结合AutoService库,实现了带子命令的工具,方便扩展…...

pycharm运行pytest无法实时输出信息
需要去掉控制台输出。根据查询相关信息显示pycharm运行pytest无法实时输出信息,需要去掉pycharm里面的运行模式,点击减号,再点击加号,添加python执行文件即可实时输出信息。 问题描述: 使用pycharm运行代码时&#x…...
Mac 卸载 IntelliJ IDEA 方法
Mac 系统下 IDEA 没有一键卸载程序,也没有完全卸载的插件,若要彻底删除,除了在应用(Application)里删除 IDEA 到垃圾桶外,还需要在终端(Terminal)执行删除相应的文件及文件夹。 1 分…...

数据安全能力框架模型-详细解读(三)
数据安全能力框架内涵 “奇安信数据安全能力框架”体现了数据安全治理从组织机构安全治理,到数字化环境具体管控、分析能力分层逐步落实的工程方法。 它以企业数据安全的战略目标和风险容忍度为输入,明确数据安全治理的组织;以合规与治理需…...
vscode启动leiningen项目
要在 VS Code 中启动 Leiningen 项目,你可以按照以下步骤进行操作: 确保已经安装了 Leiningen。你可以在终端中输入 lein version 来检查是否已成功安装。 在 VS Code 中安装 Leiningen 扩展。打开 VS Code,点击左侧的扩展图标(四…...
Qt事件的传递顺序
事件的传递顺序 事件的传递顺序是这样的:先是事件过滤器,然后是该部件的event()函数,最后是该部件的事件处理函数。这里还要注意,event()函数和事件处理函数,是在该部件内进行重新定义的,而事件过滤器却是…...

基于facenet+faiss开发构建人脸识别系统
facenet是一款非常经典的神经网络模型,它可以直接学习从人脸图像到欧几里德空间的映射(直接将人脸映射到欧几里得空间)。在欧几里德空间中,距离直接对应于人脸相似性的度量。一旦这个空间产生,使用标准技术,将FaceNet嵌入作为特征…...

数据分析的心脏:获取数据的好工具
打开网站:Scrape and Monitor Data from Any Website with No Code 新建机器人: 选择类型: 填写目标网站网址: 输入网址:https://cn.wsj.com/zh-hans/news/technology 第一次录制需要安装chrome插件: 并设置…...

【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)
前言:在最近的实际开发的过程中,遇到了在多数据源的情况下要保证原子性的问题,这个问题当时遇到了也是思考了一段时间,后来通过搜集大量资料与学习,最后是采用了分布式事务来解决这个问题,在讲解之前&#…...
js中什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
目录 目录 目录 参考资料 必看强烈建议十分钟看完视频 ,即可学会 必看参考详解宏任务微任务 参考资料 1 宏任务与微任务_哔哩哔哩_bilibili 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?_什么是宏任务和微任…...

Word中如何断开表格中线段
Word中如何断开表格中线段_word表格断线怎么弄_仰望星空_LiDAR的博客-CSDN博客有时候为了美观,需要实现如下的效果,即第2条线段被断开成3段步骤如下:选中需要断开的格网,如下,再选择段落、针对下框标即可。_word表格断…...

大数据指标体系-笔记
指标体系 1 总体流程图 1.1 2 模型‘ 2.1 OSM OSM(Object,Strategy,Measure) 「业务度量」涉及到以下两个概念:一个是KPI ,用来直 接衡量策略的有效性;一个是Target,是预先给出的值,用来判断是否达到预期 2.2 UJM User, Journey, Map 2.3 AARRR-海盗 AARRR(Acquisitio…...

Arthas协助MQ消费性能优化
背景 项目中使用AWS的SQS消息队列进行异步处理,QA通过压测发现单机TPS在23左右,目标性能在500TPS,所以需要对消费逻辑进行优化,提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈ÿ…...

【Linux】【docker】安装sonarQube免费社区版9.9
文章目录 ⛺sonarQube 镜像容器⛺Linux 安装镜像🍁出现 Permission denied的异常🍁安装sonarQube 中文包🍁重启服务 ⛺代码上传到sonarQube扫描🍁java语言配置🍁配置 JS TS Php Go Python⛏️出现异常sonar-scanner.ba…...

C/C++实现librosa音频处理库melspectrogram和mfcc
C/C实现librosa音频处理库melspectrogram和mfcc 目录 C/C实现librosa音频处理库melspectrogram和mfcc 1.项目结构 2.依赖环境 3.C librosa音频处理库实现 (1) 对齐读取音频文件 (2) 对齐melspectrogram (3) 对齐MFCC 4.Demo运行 5.librosa库C源码下载 深度学习语音处…...

浪潮服务器硬盘指示灯显示黄色的服务器数据恢复案例
服务器数据恢复环境: 宁夏某市某单位的一台浪潮服务器,该服务器中有一组由6块SAS硬盘组建的RAID5阵列。 服务器上存放的是Oracle数据库文件,操作系统层面划分了1个卷。 服务器故障&初检: 服务器在运行过程中有两块磁盘的指示灯…...

宋浩概率论笔记(三)随机向量/二维随机变量
第三更:本章的内容最重要的在于概念的理解与抽象,二重积分通常情况下不会考得很难。此外,本次暂且忽略【二维连续型随机变量函数的分布】这一章节,非常抽象且难度较高,之后有时间再更新。...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...