JavaScript 寻找两个数的交集

文章目录

  • 实现思路
  • 使用场景
  • 考察的知识点
  • 实现方法
    • 方法 1:使用 `filter` 和 `includes`
    • 方法 2:使用 `Set` 和 `filter`
    • 方法 3:使用 `reduce`
    • 方法 4:使用第三方库

数组的交集是指两个数组中都包含的元素集合。即在两个数组中都存在的元素所组成的新的数组。

实现思路

要找出两个数组的交集,可以使用以下方法:

  • 使用 filterincludes 方法。
  • 使用 Set 数据结构结合 filter 方法。
  • 使用 reduce 方法。
  • 使用第三方库如 Lodash/Radash 提供的 intersection 方法。

使用场景

找出数组交集在数据处理、集合操作等场景中非常常见。例如,在数据分析中需要找出两个数据集的共同元素,或在处理用户权限时需要找出两个权限集合的交集。

考察的知识点

  • JavaScript 数组操作方法(如 filterincludes)。
  • 数据结构(如 Set)。
  • 第三方库的使用。
  • 算法和时间复杂度的基本概念。

实现方法

方法 1:使用 filterincludes

/*** 找出两个数组的交集* @param {Array} arr1 - 第一个数组* @param {Array} arr2 - 第二个数组* @return {Array} - 两个数组的交集*/
function intersection(arr1, arr2) {return arr1.filter((item) => arr2.includes(item));
}// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]

方法 2:使用 Setfilter

/*** 找出两个数组的交集* @param {Array} arr1 - 第一个数组* @param {Array} arr2 - 第二个数组* @return {Array} - 两个数组的交集*/
function intersection(arr1, arr2) {let set2 = new Set(arr2);return arr1.filter((item) => set2.has(item));
}// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]

方法 3:使用 reduce

/*** 找出两个数组的交集* @param {Array} arr1 - 第一个数组* @param {Array} arr2 - 第二个数组* @return {Array} - 两个数组的交集*/
function intersection(arr1, arr2) {return arr1.reduce((acc, curr) => {if (arr2.includes(curr)) acc.push(curr);return acc;}, []);
}// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]

方法 4:使用第三方库

// 二选一
const _ = require("lodash"); // lodash
import { intersects } from "radash"; // radash// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];console.log(_.intersection(array1, array2)); // lodash 输出: [3, 4, 5]
console.log(intersects(array1, array2)); // radash 输出: [3, 4, 5]

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

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

相关文章

Android Studio项目升级报错:Namespace not specified

原项目升级AGP到8.0时报错: Namespace not specified. Specify a namespace in the modules build file: C:\Users\Administrator\Desktop\MyJetpack\app\build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about…

IT人的拖延——这个任务太复杂,太难了怎么办?

随着科技的发展,IT人需要不断地运用新技术来解决更多传统方式难以解决的问题,有些问题真的不是不想解决,而是真的太复杂,太难了,根本不知道从何开始,也没有什么前辈的经验可以借鉴。我们这些对事情难度的认…

文献越读_细菌中5‘UTR上RG4促进翻译效率

题目:2023_5’UTR G-quadruplex structure enhances translation in size dependent manner 这篇文章的核心内容是关于5’非翻译区(5’UTR)中的G-四链体(G4)结构如何影响细菌翻译效率的研究。以下是文章的主要发现和结…

软链接和硬链接的详解 (Linux系统下)

文章目录 硬链接的引入软链接和硬链接的形成软链接硬链接 软硬链接区别的探究硬链接数结语 硬链接的引入 当我们在命令行中输入ll时会出现很多行信息,详情请看下面的图 ~~~~εεε( ̄▽ ̄) 我在之前的几篇Linux的文章也讲过哦 (o゚v…

ARM32开发--电源管理单元

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 PMU 电源域 VDD/VDDA域 备份域 1.2V域 省电模式 睡眠模式 深度睡眠模式 待机模式 几种模式总结 WFI和WFE指令 案例需求 模式初始化 源码 总结 前言 在嵌入式系统中,有效的电池管…

buuctf-findKey

exe文件 运行发现这个窗口,没有任何消息 32位 进入字符串就发现了flag{ 左边红色代表没有F5成功 我们再编译一下(选中红色的全部按p) LRESULT __stdcall sub_401640(HWND hWndParent, UINT Msg, WPARAM wParam, LPARAM lParam) {int v5; // eaxsize_t v6; // eaxDWORD v7; /…

【自动驾驶】浅学一下BEV目标检测记录

现在BEV与OCC占用网络非常火,在日常工作中,如果没有接触到,可能会忽略相应的知识储备。本人还未看大量文献,所以只能算浅学下记录,这里主要从互联网上学习到的,还是就是跟专业的同事请教之后,自…

使用Elasticsearch在同一索引中区分不同类型的文档

在使用Elasticsearch时,有时我们需要在同一个索引中存放不同类型的文档,并且这些文档的字段可能不一致。在早期版本中,我们可以使用types来实现,但在Elasticsearch 7.x及更高版本中,types概念已被弃用。本文将介绍如何…

【python基础语法1】注释,变量与运算符

这里写自定义目录标题 一、注释分类注意 二、变量变量的声明变量的命名注意 变量的交换常量 三、数据类型分类六大标准数据类型Number 数字类型 分类:2个内置方法 type 和 id自动类型转换强制类型转换容器类型分类:五个字符串类型 str列表类型 list内置函…

去除upload的抖动效果

title: 去除upload的抖动效果 date: 2024-06-15 20:16:51 tags: vue3 在使用vue3element-plus框架的时候,常常会使用到el-upload方法。其中如果做了翻页效果可以发现图片过度方式是集中到左上角进行的翻页,这种效果不是很好,我们还是想让这中…

【Numpy】一文向您详细介绍 np.round()

【Numpy】一文向您详细介绍 np.round() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情

文章目录 debug断点篇:打临时断点(只用一次):alt断点条件断点:在断点上,点击右键,在Condition那里,设置我们需要的值,循环就会自动停到我们设置的那个值那里依赖断点&…

TypeScript类型声明

类型系统 目录 类型系统 目录类型推断 字符串数值布尔值bigintobject 类型声明 字符串数值bigint布尔 首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互…

Jmeter多个请求按照比例并发压测的几种方式

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、需求 在压测的过程中,为了能够压测整个链路,通常需要多个接口进行并…

Markdown如何分页操作

Markdown导出分页操作 在平时的文档导出过程中Markdown过程中会出现因为不能分页导致的排版问题。 排版问题在将Markdown文档导出为PDF或其他格式时尤为明显。当文档内容超过一页时,无法自动调整页面布局,导致内容不连续,甚至导致图片或表格…

【每日刷题】Day66

【每日刷题】Day66 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的递增之旅_牛客题霸_牛客网 (nowcoder.com)…

预编译、函数变量提升

函数声明会覆盖变量的声明,也就是会提升到最前面。 形参传进来相当于变量声明,所以当有函数声明时,会被覆盖。

(四十)vuex之四个map辅助函数

文章标题 概述使用方式mapStatemapGettersmapActionsmapMutations 上一篇:(三十九)Vue之集中式的状态管理机制Vuex 概述 Vuex辅助函数是一组用于简化在Vue.js应用程序中使用Vuex状态管理库的函数。这些辅助函数可以帮助我们在组件中更轻松地…

计算机组成原理之定点加法与减法运算

文章目录 补码的加减法算法的流程与逻辑实现溢出判断溢出原因单符号位判断双符号位(变形补码) 基本的加法/减法器舍入方法习题 补码的加减法 数用补码表示,符号位参与运算 考虑几个问题? 1.实际操作能否只取决于操作码&#xff1f…