前言

在vue+element项目中有设计到到表格中修改数据需求,虽然采用弹窗的方式,在表单中进行数据修改比较常见,而且可以修改更多字段验证。但少数情况下也可以做成直接在表格上编辑。如果数据量大的时候,就需要判断哪些记录做了修改,把修改的数据传给后端。
判断的方式可以在字段上加修改标识证明这条数据被修改了。另一种就是备份一份数据,最后两个数据做比较。看具体的业务场景可以选择不同的方式。

业务场景

这里我最后判断两份数据是否一样,筛选出修改过的传给后端。
因为业务场景中有需要涉及表格的行拖动,就是拖动行来修改优先级。在tableData上表现的是记录的顺序变了。所以考虑到其他原因我选择提交前比较两份数据的差异。

代码实现

这有两份数据。t2是原本后端传来的数据。先做一个深拷贝存起来。
t1是修改过的数据,包括了顺序和值的修改。
我要做的是比较两个数据是不是修改了值和顺序,并返回修改过的记录。并且将优先级的值修改。

vart1 = [{yxj: 1, // 优先级sfqy: '001 ',}, {yxj: 2,sfqy: '002 ',}, {yxj: 4,sfqy: '004 ',}, {yxj: 3,sfqy: '003',}];var t2 = [{yxj: 1, // 优先级sfqy: '001 ',}, {yxj: 2,sfqy: '002 ',}, {yxj: 3,sfqy: '003',}, {yxj: 4,sfqy: '004 ',}]

下代码中就用了两层遍历,进行比较。

function compareTableData({ data, originData, isUseStrict, diffFn }) {var changedRows = [];data.map((e, i) => {var changedState = {state: false};for (const k in e) {if (isUseStrict && Object.hasOwnProperty.call(e, k) && originData[i][k] !== e[k]) {changedState.state = truediffFn && diffFn(e, originData[i])break;}if (!isUseStrict && Object.hasOwnProperty.call(e, k) && originData[i][k] != e[k]) {changedState.state = truediffFn && diffFn(e, originData[i])break;}};if (changedState.state) {changedRows.push(e)}})return changedRows;}

示例和结果

在diffFn(如果出现不同的记录时执行)中交换了两个的优先级字段。
这样封装在于可以用于在提交之前做一些操作。
将不变的部分和可变的部分分离。使其适应更多需求。

 console.log(compareTableData({data: t1, originData: t2, diffFn: (r1, r2) => {r1['yxj'] ^= r2['yxj']r2['yxj'] ^= r1['yxj']r1['yxj'] ^= r2['yxj']}}))// 结果
[{"yxj": 3,"sfqy": "004 "},{"yxj": 4,"sfqy": "003"}
]

表格中编辑后进行数据比较的方法介绍-比较两套数据相关推荐

  1. Word文档粘贴的表格中文字有淡灰色背景的去除方法

    直接从excel粘贴过来的表格 特征: 无论怎么改字符的底色还是边框底纹都无法去除: 更改字符底纹,该底纹也没有变化: 更改各种格式样式都无法消除: 各种格式刷都不管用. 光标移到别处不会显示灰色背景 ...

  2. 教你在CAD中编辑标注尺寸界线的倾斜角的方法

    在CAD中,对于完成的标注,还可以使用"编辑标注"命令对尺寸文字的角度.尺寸界线的倾斜角进行修改,接下来就以一个图形为例为大家介绍一下CAD中编辑标注尺寸界线的倾斜角的方法! 打开 ...

  3. python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

    本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在本文中,我们将介绍从数据集中选择要素的不同方法; 并使用S ...

  4. mysql查看用户名_Mysql创建数据表的方法介绍(附示例)

    本篇文章给大家带来的内容是关于Mysql创建数据表的方法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 数据表是数据库最重要的组成部分之一,是其他对象的基础.如果我们的 ...

  5. mysql创建数据表示例_Mysql创建数据表的方法介绍(附示例)

    本篇文章给大家带来的内容是关于Mysql创建数据表的方法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 数据表是数据库最重要的组成部分之一,是其他对象的基础.如果我们的 ...

  6. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍

    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...

  7. 表格中复制后出现空格_软件应用在Excel表格中怎样批量删除空格?

    在日常办公中对于Excel的使用有没有全部掌握呢?怎样快速整理表格中的数据呢?这些都是职场必备技能,了解更多的Excel知识可以让你在数据管理,表格管理中游刃有余.下面为大家分享一些经常使用的Exce ...

  8. Element—UI 表格中换页后序号不变的问题

    问题情况:在表格中做出了分页功能后发现分页后的序号还是从1开始 解决方法: <el-table-columnlabel="序号"type="index"w ...

  9. 行进中换轮胎——万字长文解析美团和大众点评两大数据平台是怎么融合的

    点击上方"公众号"可以订阅哦 本文根据作者在2017年ArchSummit的分享记录整理而成. 背景 互联网格局复杂多变,大规模的企业合并重组不时发生.原来完全独立甚至相互竞争的两 ...

最新文章

  1. 对于一个人工智能项目如何把模型调整为最好
  2. 使用伪指令#pragma pack
  3. 计算机专业新老生交流会ppt,铜陵学院实践部新老生交流会.ppt
  4. Android 数据显示控件(ListView实战演练)
  5. matlab 图像坐标系
  6. 洪水同频率放大的方法_我们应该怎么选择放大器配件?
  7. 【Java】JavaIO(一)、基础知识
  8. 以云战“疫”,这次阿里云又让人们惊了……
  9. Oracle行转列语法总结大全
  10. pkg_resources.DistributionNotFound: distribution was not found and is required by the application
  11. JAVA多线程和并发基础面试题
  12. Android开发——小技巧(二)修改APP图标和名字
  13. 软件工程__CMMCMMI
  14. minus oracle 顺序_Minus 在oracle 中的用法
  15. Todd Lammle's CCNA IOS Commands Survival Guide
  16. 黑客用恶意软件Dropper攻击了Pale Moon存档服务器
  17. matlab笔记:一元微分方程求解
  18. 企业购买银行理财产品如何核算
  19. 如何将任意辣鸡话题写成一篇优秀的毕业论文——以本文为例
  20. 论文笔记:Highly accurate protein structure prediction with AlphaFold (AlphaFold 2 appendix)

热门文章

  1. Windows右键菜单美化(适用版本:Win7-Win11)
  2. 与兄弟连的不期而遇似早已缘定——是什么促使我来兄弟连
  3. macbook移动文件
  4. matlab中taufft,非线性光纤光学中分步傅里叶算法(SSFFT)的matlab代码实现
  5. Java如何把UNIX时间戳转换成日期格式-日期格式转化时间戳戳-当前时间戳
  6. 快速中值滤波——Python实现
  7. 复制文件或文件夹时出错(无法复制***:没有足够的可用磁盘空间
  8. 港联证券|标普500指数年内涨逾9%,美股牛市已至?
  9. H5和原生APP之间的区别
  10. Hadoop 深入浅出----HDFS(2)