当前位置: 首页 > news >正文

JS判断两个table数据是否完全相等(判断两个数组对象是否完全相等)

需求

现有的table为tableA,有多个要做对比的table为一个数组 CompareArray

涉及到的问题

  1. 外层是数组,但是内部数据都是对象,对象属性名的排序不一样
  2. 外层数组也涉及到 顺序不一样的问题

思路

  1. compareArray做长度筛选 filter 得到 同长度的table,为一个新数组,sameLengthArray

  2. tableA 以属性名称做排序(这里应该是以属性名称的英文字母做排序)

  3. sameLengthArray做filter遍历, 对遍历的每一项sItem,先做一个以属性名称做排序

  4. tableA 做filter遍历,判断当前项esItem中是否找得到 【用字符串来判断】

    JSON.stringify(sItem).includes(JSON.stringify(e))
    

5.如果两个table一样,那么步骤4filter出来的长度就应该和tableA长度一样

Code

 // 先筛选出条件长度相同的项const sameLengthArray = compareArray.filter(e => e.length === tableA.length)if (sameLengthArray && sameLengthArray.length > 0) {// 以属性名称做排序tableA.forEach((e, index) => {tableA[index] = JSON.parse(JSON.stringify(objKeySort(e)))})const resultRecord = sameLengthArray.filter(sItem => {// 以属性名称做排序sItem.forEach((e, index) => {sItem[index] = JSON.parse(JSON.stringify(objKeySort(e)))})// 如果当前和这个是一样的,那么filter出来的数组应该和当前数组长度一致const hasIndex = tableA.filter(e =>JSON.stringify(sItem).includes(JSON.stringify(e)))return hasIndex && hasIndex.length === tableA.length})if (resultRecord && resultRecord.length > 0) {console.log("存在数据相同的table")} else {console.log("没有相同的table")}} else {console.log("没有相同的table")}//**********************************
// 属性排序方法是额外的
export function objKeySort(obj) {//排序的函数var newkey = Object.keys(obj).sort();//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组var newObj = {};//创建一个新的对象,用于存放排好序的键值对for (var i = 0; i < newkey.length; i++) {//遍历newkey数组newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对}return newObj;//返回排好序的新对象
}
http://www.lryc.cn/news/5394.html

相关文章:

  • 关于小程序,你想知道的这些
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-13
  • 【Linux】软件安装(三分钟教会你如何在linux下安装软件)
  • Fluent Python 笔记 第 10 章 序列的修改、散列和切片
  • 在中国程序员工作是青春饭吗?
  • Linux tcpdump
  • redis知识汇总(部署、高可用、集群)
  • 【手写 Vuex 源码】第十篇 - Vuex 命名空间的实现
  • 面试腾讯测试岗后感想,真的很后悔这5年一直都干的是基础测试....
  • 知识图谱 方法、实践与应用 王昊奋 读书笔记(下)
  • vue实现打印浏览器页面功能(两种方法)
  • 【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(Prometheus格式)
  • 【青训营】分布式定时任务简述
  • golang语言本身设计点总结
  • PTA L1-046 整除光棍(详解)
  • 将小程序代码转成uni-app代码
  • C语言在游戏中播放音乐
  • 机器学习算法:随机森林
  • 如何做好多项目全生命周期的资源调配,提升资源利用效率?【橙子】
  • JVM - 内存分配
  • 【知识图谱论文】Bi-Link:通过转换器和提示的对比学习桥接来自文本的归纳链接预测
  • jieba+wordcloud 词云分析 202302 QCon 议题 TOP 关键词
  • 包管理工具-npm-npx-yarn-cnpm
  • go gin学习记录1
  • Docker常用命令
  • 论文写作——公式编辑器、latex表格、颜色搭配器
  • MySQL数据库12——视图(VIEW)
  • 第四代英特尔至强重磅发布,芯片进入下半场:软硬加速、绿色可持续
  • c++-运算符函数与运算符重载
  • 【MySQL Shell】8.9.3 修复 InnoDB ClusterSet 中的成员服务器和集群