两数组根据数组中每条数据对象中的某个值合并去重

假设有两个数组:arr1 和 arr2,并且每个数组中的元素是对象,你希望根据对象中的某个属性(比如 id),判断 arr2 中是否已经存在具有相同 id 值的对象。如果没有重复,就将 arr1 中的该对象新增到 arr2 中,否则不新增。

const arr1 = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Charlie' },
];const arr2 = [{ id: 2, name: 'Bob' },{ id: 4, name: 'David' },
];

在这个例子中,arr1 中有 id 为 2 的对象,arr2 也有 id 为 2 的对象,因此不应该新增这个对象。最终结果应该是新增 id 为 1 和 3 的对象到 arr2 中。

实现方法:
方法 1:使用 Array.prototype.some

arr1.forEach(item1 => {const isDuplicate = arr2.some(item2 => item2.id === item1.id);if (!isDuplicate) {arr2.push(item1);}
});console.log(arr2);
// 输出: [
//   { id: 2, name: 'Bob' },
//   { id: 4, name: 'David' },
//   { id: 1, name: 'Alice' },
//   { id: 3, name: 'Charlie' }
// ]

方法 2:使用 Set 提高效率
当数据量较大时,使用 Set 来记录 arr2 中已存在的 id 值,可以减少 some 方法的遍历时间,提高性能。

const idSet = new Set(arr2.map(item => item.id));arr1.forEach(item => {if (!idSet.has(item.id)) {arr2.push(item);idSet.add(item.id); // 记录新增的 id,避免重复检查}
});console.log(arr2);
// 输出: [
//   { id: 2, name: 'Bob' },
//   { id: 4, name: 'David' },
//   { id: 1, name: 'Alice' },
//   { id: 3, name: 'Charlie' }
// ]

方法 3:使用 Map 进行查重和合并
如果需要对对象的其他属性进行合并或更新,可以使用 Map,它的键值对查找速度更快。

const map = new Map(arr2.map(item => [item.id, item]));arr1.forEach(item => {if (!map.has(item.id)) {map.set(item.id, item);arr2.push(item); // 新增到 arr2 中}
});console.log(arr2);
// 输出: [
//   { id: 2, name: 'Bob' },
//   { id: 4, name: 'David' },
//   { id: 1, name: 'Alice' },
//   { id: 3, name: 'Charlie' }
// ]

解释:
forEach 和 some:

遍历 arr1 中的每一个对象,使用 some 方法检查 arr2 中是否有相同 id 的对象。
如果 some 返回 false(表示没有重复),则将该对象新增到 arr2 中。
Set:

Set 用于快速记录和查找 id,避免重复。
使用 Set 能减少重复检查的时间复杂度,从而提高性能,特别是在数据量较大的情况下。
Map:

Map 用于将 id 作为键,快速查找是否已经存在对应的对象。
这种方法也可以扩展用于更新已有对象的属性,而不是简单地跳过重复对象。
总结:
当数组较小时,使用 forEach + some 是一种简单直观的方法。
当数组较大时,使用 Set 或 Map 可以显著提高查重的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用(一)索引的创建及数据组织(二)不同类型的索引(三)索引的额外属性 三、索引的优化与查询计划分析(一)通过prof…

企业如何实现无缝数据中心进行大数据迁移呢?

数据中心迁移是企业面临的一个复杂而关键的挑战,涉及到大量的数据移动和系统的重新部署。随着业务的扩展和技术的进步,企业可能需要将数据中心迁移到新的位置或升级到更先进的设备。在进行数据迁移时,必须精心规划和执行,以确保数…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中,我们了解了基础的网络知识,网络的出…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

最全最简单理解迭代器

1. 迭代器的基础概念(iterator) 1.1 本质 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 1.2 作用: 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。容器提供迭代…

MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3

一、基本信息 中文名称:[2-(三甲基铵)乙基]甲硫基磺酸溴;MTSET巯基反应染料 英文名称:MTSET;[2-(Trimethylammonium)ethyl]methanethiosulfonate Bromide CAS号:91774-25-3 分子式:C6H16BrNO2S2 分子量…

CC1链学习记录

🌸 前言 上篇文章学习记录了URLDNS链,接下来学习一下Common-Colections利用链。 🌸 相关介绍 Common-Colections是Apache软件基金会的项目,对Java标准的Collections API提供了很好的补充,在其基础上对常用的数据结构…

数据结构PTA

20:C 22:B 27:D 填空 4-2:19 4-4:66 4-5:8 5-x:不加分号 ⬇:top p->next 编程 单链表 每个节点除了存放数据元素外,还要存储指向下一节点的指针…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网:www.iccaid.net 大会时间:2024年12月13-15日 大会地…

【go从零单排】Command-Line Flags、Command-Line Subcommands命令行和子命令

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,命令行标志(Command-Line Flags&#xff09…

WEB攻防-通用漏洞SQL读写注入MYSQLMSSQLPostgraSQL

知识点: 1、SQL注入-MYSQL数据库; 2、SQL注入-MSSQL数据库; 3、SQL注入-PostgreSQL数据库; 首先要找到注入点 详细点: Access无高权限注入点-只能猜解,还是暴力猜解 MYSQL,PostgreSQL&am…

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系; 平时在dev环境开发时,会把自己的本地服务也注册上去,但是这样的话,在客户端调用时请求可能会打到自己本地,对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

腾讯云11.11云服务器活动--上云拼团GO

目录 云服务器活动介绍: 轻量服务器 上GO拼团领券 云服务器购买 HAI现金券 学生专享GPU 活动总结 云服务器活动介绍: 双十一临近,这是您一年中最期待的购物狂欢时刻。作为国内领先的云计算服务商,腾讯云诚挚为您呈献前所未有的优惠福利,助您在这…

防脱生发最有效的产品,测评总结早看少踩雷

别人脱单、脱贫你脱发,就问你心酸不心酸?探索防脱之路确实不易,到底怎么才能有效防脱养发呢,很有必要分享一下我多年的防脱心得,这几款一直在用的防脱育发好物,秃头朋友们可以看看~ **露卡菲娅防脱精华液**…

c++:string(一)

文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题(1)怎么扩容(2&#…

【2048】我的创作纪念日

机缘 2048天,不知不觉来csdn博客已经有2048天了,其实用csdn平台很久了,实际上写博客还是从2019年开始。 还记得最初成为创作者初心是什么吗? 最开始,主要是用来做笔记。平时工作中、学习中遇到的技术相关问题都会在cs…

壁仞科技上市前最后一波 校招 社招 内推

随着美国大选结束,国内GPU 产业得到空前的的发展空间,国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技,摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点,抓住机会💪 壁仞科技正在火热…

sql server 自动kill 查询超过20分钟的语句

起源于同事的烂sql 容易拖垮 数据服务器, 周末没有人监控数据库,好几次导致主从数据库同步失败 ,不得不自动kill 烂sql 语句如下 : -- 声明变量来存储超过20分钟的查询的会话ID DECLARE kill_sessions TABLE (session_id INT); …

GMS地下水数值模拟、全流程各工程类型地下水环境影响评价、MODFLOW Flex

GMS地下水数值模拟技术及在地下水环评中的应用 以地下水数值模拟软件GMS10.1操作为主要内容,在教学中强调三维地质结构建模、水文地质模型概化、边界条件设定、参数反演和模型校核等关键环节。不仅使学员掌握地下水数值模拟软件GMS10.1的全过程实际操作技术的基本技…

基于Multisim水箱水位控制系统仿真电路(含仿真和报告)

【全套资料.zip】水箱水位控制系统仿真电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.在水箱内的不同高度安装3根金属棒,以感知水位变化情况, 液位分1&…