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

JavaScript中包含对象的数组去重

一.数组遍历

function Uniarray(array) {// 接收去重后的数组let resArr = [];// 遍历数组for (let i = 0; i < array.length; i++) {let isFind = false;// 检查当前元素是否已存在于结果数组中for (let j = 0; j < resArr.length; j++) {// 使用严格相等运算符(===)来比较元素if (objectsAreEqual(array[i], resArr[j])) {isFind = true;break;}}// 如果元素不在结果数组中,则添加到结果数组if (!isFind) {resArr.push(array[i]);}}return resArr;
}

二.判断是否是原始值

使用typeof运算符来判断一个值是否是原始值。原始值包括数字、字符串、布尔值、null和undefined。

/如果一个值不是原始值,那么它就是对象或函数。

function isPrimitive(value) {return value === null || typeof value !== 'object' && typeof value !== 'function';
}

三.对象比较

function objectsAreEqual(obj1, obj2) {if (isPrimitive(obj1) || isPrimitive(obj2)) {return obj1 === obj2;}const keys1 = Object.keys(obj1);const keys2 = Object.keys(obj2);if (keys1.length !== keys2.length) {return false;}// !keys2.includes(key)检查当前属性名是否也存在于中keys2。// 如果键不存在于keys2,则意味着两个对象具有不同的键集,并且该函数应返回false。// !objectsAreEqual(obj1[key], obj2[key])比较与两个对象中当前键关联的值。// 它递归调用objectsAreEqual以检查值是否相等以及存在对象嵌套的情况。//如果值不相等,则意味着对象不相等,函数应返回false。for (const key of keys1) {if (!keys2.includes(key) || !objectsAreEqual(obj1[key], obj2[key])) {return false;}}return true;
}

四.运行测试

/*** 数组去重* @param array  * @return array*/
function Uniarray(array) {let resArr = [];for (let i = 0; i < array.length; i++) {let isFind = false;for (let j = 0; j < resArr.length; j++) {if (objectsAreEqual(array[i], resArr[j])) {isFind = true;break;}}if (!isFind) {resArr.push(array[i]);}}return resArr;
}/*** 判断原始值* @param ** @return boolean*/function isPrimitive(value) {return value === null || typeof value !== 'object' && typeof value !== 'function';
}/*** * @param object * @param object * @return boolean*/function objectsAreEqual(obj1, obj2) {if (isPrimitive(obj1) || isPrimitive(obj2)) {return obj1 === obj2;}const keys1 = Object.keys(obj1);const keys2 = Object.keys(obj2);if (keys1.length !== keys2.length) {return false;}for (const key of keys1) {if (!keys2.includes(key) || !objectsAreEqual(obj1[key], obj2[key])) {return false;}}return true;
}const arr1=[{a:'1',b:'1'},{a:'1',b:'2'},{a:'1',b:'1'}]
const arr2=[{a:'1',b:undefined},{a:'1',b:'2'},{a:'1',c:undefined}]
const arr3=[{a:{c:1},b:'1'},{a:{c:1},b:'1'},{a:{c:1},b:'2'}]
console.log(Uniarray(arr1))
console.log(Uniarray(arr2))
console.log(Uniarray(arr3))

http://www.lryc.cn/news/155675.html

相关文章:

  • gRPC-GateWay Swagger 实战
  • 【webpack】HMR热更新原理
  • Ceph构件及组件分析
  • 第六章:中华民族的抗日战争
  • 签到系统怎么设计
  • 危险的套娃:攻击者在 PDF 文件中隐藏恶意Word 文档
  • 怎样将几个pdf合并?
  • vr健康管理服务情景化教学弥补现代医学教学中的诸多不足之处
  • 【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue
  • CAN FD的一致性测试 助力汽车电子智能化
  • 微信短链跳转到小程序指定页面调试
  • 机器学习——聚类算法一
  • 【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统
  • The Sandbox 与韩国仁川市合作,打造身临其境的城市体验内容
  • JVM之堆和方法区
  • Java 中的 IO 和 NIO
  • Linux-crontab使用问题解决
  • 【设计模式】
  • 2023_Spark_实验四:SCALA基础
  • 【深入解析spring cloud gateway】04 Global Filters
  • c++搜索基础进阶
  • 管网水位监测的必要性
  • 无涯教程-Android - 系统架构
  • await接受成功的promise,失败的promise用try catch
  • 赞奇科技参与华为云828 B2B企业节,云工作站入选精选产品解决方案
  • Docker私有镜像仓库(Harbor)安装
  • 【深入解析spring cloud gateway】06 gateway源码简要分析
  • 2023年行研行业研究报告
  • linux上vscode中.cpp文件中引入头文件.hpp时报错:找不到头文件(启用错误钵形曲线)
  • Sphinx Docstring