当前位置: 首页 > 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))

相关文章:

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) {// 使用严格相等运算符&#xff08;&am…...

gRPC-GateWay Swagger 实战

上一次我们分享了关于 gRPC-Gateway 快速实战 &#xff0c;可以查看地址来进行回顾 : 也可以查看关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分享关于 gRPC-G…...

【webpack】HMR热更新原理

本文&#xff1a;参考文章 一、HMR是什么&#xff0c;为什么出现 1、出现的原因 之前&#xff0c;应用的加载、更新都是一个页面级别的操作&#xff0c;即使单个代码文件更新&#xff0c;整个页面都要刷新&#xff0c;才能拿到最新的代码同步到浏览器&#xff0c;导致会丢失…...

Ceph构件及组件分析

Ceph存储架构 Ceph 存储集群由几个不同的daemon组成&#xff0c;每个daemon负责Ceph 的一个独特功能并。每个守护进程是彼此独立的。 下面将简要介绍每个Ceph组件的功能&#xff1a; RADOS&#xff08;Reliable Autonomic Distributed Object Store, RADOS&#xff09; RADOS…...

第六章:中华民族的抗日战争

1.日本发动灭亡中国的侵略斗争 关键字&#xff1a; 中国抗日战争的起点与全民族抗战阶段 2.中国人民奋起抗击日本侵略者 关键字&#xff1a; 1 国共第二次统一战线初步建立的标志&#xff1a;国民党五届三中全会 2 扭转时局的枢纽&#xff0c;国内和平初步实现&#xff1a;…...

签到系统怎么设计

背景 相信签到系统大家都有接触过&#xff0c;更多的是使用。但是有思考过这种系统是怎么设计的吗&#xff1f;比方说我统计一下每个月中每天的签到情况&#xff0c;怎么设计呢&#xff1f;今天一篇文章告诉你。 首先&#xff0c;我们熟悉的思维是&#xff1a;我设计一个数据…...

危险的套娃:攻击者在 PDF 文件中隐藏恶意Word 文档

据BleepingComputer消息&#xff0c;日本计算机紧急响应小组 (JPCERT) 日前分享了在2023 年 7 月检测到的利用PDF文档的新型攻击——PDF MalDoc攻击&#xff0c;能将恶意 Word 文件嵌入 PDF 来绕过安全检测。 JPCERT采样了一种多格式文件&#xff0c;能被大多数扫描引擎和工具识…...

怎样将几个pdf合并?

在日常工作中&#xff0c;我们经常需要处理大量的PDF文件。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件&#xff0c;以便于快速传输或方便查阅。虽然PDF文件本身不能进行编辑&#xff0c;但是借助专业的PDF编辑软件&#xff0c;我们可以轻松地实现将多个PDF文件合并…...

vr健康管理服务情景化教学弥补现代医学教学中的诸多不足之处

高职高专临床医学院校以培养岗位胜任力为目的&#xff0c;该专业是一门专业性、实践性较强的医学学科&#xff0c;要求培养出来的学生具有较强的临床实践能力&#xff0c;医学生所学的全部知识&#xff0c;都应与实践相结合&#xff0c;解决临床的实际问题&#xff0c;为患者解…...

【业务功能篇92】微服务-springcloud-多线程-异步处理-异步编排-CompletableFutrue

三、CompletableFutrue 一个商品详情页 展示SKU的基本信息 0.5s展示SKU的图片信息 0.6s展示SKU的销售信息 1sspu的销售属性 1s展示规格参数 1.5sspu详情信息 1s 1.ComplatableFuture介绍 Future是Java 5添加的类&#xff0c;用来描述一个异步计算的结果。你可以使用 isDone方…...

CAN FD的一致性测试 助力汽车电子智能化

后起之秀——CAN FD&#xff1a;随着各个行业的快速发展&#xff0c;消费者对汽车电子智能化的诉求越来越强烈&#xff0c;这使得整车厂将越来越多的电子控制系统加入到了汽车控制中&#xff0c;且在传统汽车、新能源汽车、ADAS和自动驾驶等汽车领域中也无不催生着更高的需求&a…...

微信短链跳转到小程序指定页面调试

首先说下背景&#xff1a;后端给了短链地址&#xff0c;但是无法跳转到指定页面。总是在小程序首页。指定的页面我们是h5页面。排查步骤如下&#xff1a; 1、通过快速URL Scheme 编译。上部普通编译 下拉找到此选项。 、 2、按照小程序的要求的URL Scheme输入。另外后端给的…...

机器学习——聚类算法一

机器学习——聚类算法一 文章目录 前言一、基于numpy实现聚类二、K-Means聚类2.1. 原理2.2. 代码实现2.3. 局限性 三、层次聚类3.1. 原理3.2. 代码实现 四、DBSCAN算法4.1. 原理4.2. 代码实现 五、区别与相同点1. 区别&#xff1a;2. 相同点&#xff1a; 总结 前言 在机器学习…...

【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统

本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题三等奖分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来…...

The Sandbox 与韩国仁川市合作,打造身临其境的城市体验内容

简要概括 ● The Sandbox 与仁川市联手展示城市魅力&#xff0c;打造创新形象。 ● 本次合作包含多种多样的活动&#xff0c;如 NFT 捐赠活动和针对元宇宙创作者的培训计划。 我们非常高兴地宣布与仁川市合作&#xff0c;共同打造身临其境的城市体验。 双方合作的目的是在国…...

JVM之堆和方法区

目录 1.堆 1.1 堆的结构 1.1.1 新生代&#xff08;Young Generation&#xff09; 1.1.2 年老代&#xff08;Old Generation&#xff09; 1.1.3 永久代/元空间&#xff08;Permanent Generation/Metaspace&#xff09; 1.2 堆的内存溢出 1.3 堆内存诊断 1.3.1 jmap 1.3.2…...

Java 中的 IO 和 NIO

Java 中的 IO 和 NIO Java IO 介绍Java NIO&#xff08;New IO&#xff09;介绍windows 安装 ffmpeg完整示例参考文献 Java IO 介绍 Java IO&#xff08;Input/Output&#xff09;流是用于处理输入和输出数据的机制。它提供了一种标准化的方式来读取和写入数据&#xff0c;可以…...

Linux-crontab使用问题解决

添加定时进程 终端输入&#xff1a; crontab -e选择文本编辑方式&#xff0c;写入要运行的脚本&#xff0c;以及时间要求。 注意&#xff0c;如果有多个运行指令分两种情况&#xff1a; 1.多个运行指令之间没有耦合关系&#xff0c;分别独立&#xff0c;则可以直接分为两个…...

【设计模式】

文章目录 设计模式分类UML图类与类之间关系的表示方式 设计原则 设计模式分类 创建型模式 用于描述“怎样创建对象”&#xff0c;它的主要特点是“将对象的创建与使用分离”。单例、原型、工厂、抽象工厂、建造者等 5 种创建型模式。 结构型模式 用于描述如何将类或对象按某种…...

2023_Spark_实验四:SCALA基础

一、在IDEA中执行以下语句 或者用windows徽标R 输入cmd 进入命令提示符 输入scala直接进入编写界面 1、Scala的常用数据类型 注意&#xff1a;在Scala中&#xff0c;任何数据都是对象。例如&#xff1a; scala> 1 res0: Int 1scala> 1.toString res1: String 1scala…...

Cursor AI助手反馈插件:用点赞点踩调教你的编程伙伴

1. 项目概述&#xff1a;一个为开发者“减负”的智能工具如果你是一名开发者&#xff0c;尤其是深度使用 Cursor 这类 AI 编程助手的&#xff0c;大概率遇到过这样的场景&#xff1a;你写了一段代码&#xff0c;AI 助手&#xff08;比如 Cursor 的 Copilot&#xff09;给出了一…...

VisualCppRedist AIO:Windows系统运行库终极解决方案

VisualCppRedist AIO&#xff1a;Windows系统运行库终极解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在安装新软件或游戏时&#xff0c;突…...

你的Type-C设备为什么容易坏?可能是静电防护没做对!从手机到笔记本的防护方案拆解

Type-C设备静电防护全指南&#xff1a;从原理到实战的完整解决方案 每次插拔Type-C数据线时&#xff0c;那个微小的火花可能正在悄悄摧毁你的设备。我拆解过上百台因静电损坏的电子产品&#xff0c;发现90%的Type-C接口故障都始于那个看似无害的瞬间放电现象。这种现象在干燥季…...

3步让Windows电脑变身苹果设备:AirPlay 2投屏完全指南

3步让Windows电脑变身苹果设备&#xff1a;AirPlay 2投屏完全指南 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 还在为iPhone视频无法在Windows电脑上播放而烦恼吗&#xff1f;Airplay2-win项目就是为…...

AI黑魔法实战:LLM应用性能优化与成本控制高级技巧

1. 项目概述&#xff1a;当AI遇上“黑魔法”最近在GitHub上闲逛&#xff0c;发现了一个名为“lvcn/ai-black-magic”的项目&#xff0c;这个名字本身就充满了吸引力。对于任何在AI领域摸爬滚打过的开发者来说&#xff0c;“黑魔法”这个词往往意味着那些不按常理出牌、却能解决…...

FanControl传感器检测失败?从新手到专家的完整修复指南

FanControl传感器检测失败&#xff1f;从新手到专家的完整修复指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

如何快速掌握智能游戏伴侣:3步上手的完整实战指南

如何快速掌握智能游戏伴侣&#xff1a;3步上手的完整实战指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟中的繁琐操作而烦…...

基于RAG的LLM知识库构建:从智能分块到检索增强生成实战

1. 项目概述&#xff1a;一个为大型语言模型量身定制的知识库构建工具如果你和我一样&#xff0c;经常和大型语言模型打交道&#xff0c;无论是用它们来辅助编程、分析文档&#xff0c;还是构建问答系统&#xff0c;那你一定遇到过这个核心痛点&#xff1a;如何让模型精准地理解…...

免费APK安装器:Windows上安装Android应用的终极解决方案

免费APK安装器&#xff1a;Windows上安装Android应用的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行Android应用&…...

面试题详解:检索链路设计全攻略——RAG 检索架构、查询理解、多路召回、混合检索、Rerank、上下文构造与评估闭环

1. 为什么说检索链路设计&#xff0c;是 RAG 项目的“生命线”&#xff1f;1.1 大模型回答质量&#xff0c;很多时候不是模型决定的&#xff0c;而是证据决定的在 RAG 系统里&#xff0c;大模型像一个会组织语言的“回答器”&#xff0c;但它能不能答准&#xff0c;取决于它面前…...