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

【工具类】得到多个数组中的相同元素

📝 数组交集实现总结

1. for 循环逐个比较

function intersection(arrays) {let result = arrays[0];for (let i = 1; i < arrays.length; i++) {result = result.filter(item => arrays[i].includes(item));}return result;
}

✅ 简单直观,适合新手
❌ 每次 includes 都是 O(n),大数据时性能差


2. reduce + filter(函数式写法)

function intersection(...arrays) {return arrays.reduce((acc, cur) => acc.filter(item => cur.includes(item)));
}

✅ 一行搞定,语法优雅
❌ 和方法 1 性能一样,难理解一点


3. every 检查法

function intersection(...arrays) {let [first, ...rest] = arrays;return first.filter(item => rest.every(arr => arr.includes(item)));
}

✅ 逻辑清晰:只要某元素存在于所有数组中就保留
❌ 性能中等,跟 1/2 类似


4. Set 优化

function intersection(...arrays) {return [...arrays.reduce((acc, cur) => new Set([...acc].filter(item => cur.includes(item))))];
}

✅ 用 Set 去重,避免重复元素,查询更快
❌ 还是会用到 includes,性能一般


5. Map 计数统计(推荐大数据量)

function intersection(...arrays) {const countMap = new Map();const total = arrays.length;for (let arr of arrays) {for (let item of new Set(arr)) { // 每个数组去重后再计数countMap.set(item, (countMap.get(item) || 0) + 1);}}return [...countMap.entries()].filter(([_, count]) => count === total).map(([item]) => item);
}

✅ 高效,适合处理超大数组(避免反复 includes
✅ 自动去重,不会有重复元素
❌ 写法复杂一些


📊 方法对比表

方法代码简洁度性能(小数组)性能(大数组)是否去重
for 循环⭐⭐⭐⭐⭐⭐
reduce+filter⭐⭐⭐⭐⭐⭐⭐
every 检查⭐⭐⭐⭐⭐⭐
Set 优化⭐⭐⭐⭐⭐⭐⭐⭐
Map 计数⭐⭐⭐⭐⭐⭐⭐⭐

👉 总结:

  • 小数组,简单写 → 方法 1 或 3。
  • 追求优雅 → 方法 2。
  • 避免重复元素 → 方法 4。
  • 大数据量高性能 → 方法 5(Map 计数)。
http://www.dtcms.com/a/357033.html

相关文章:

  • 考研数据结构Part3——二叉树知识点总结
  • Vue学习Ⅳ
  • 二手车估值查询-二手车估值api接口
  • el-table实现双击编辑-el-select选择框+输入框限制非负两位小数
  • HunyuanVideo-Foley视频音效生成模型介绍与部署
  • 非标设计 机架模板 misumi 设计组合案例
  • 浏览器自动化工具怎么选?MCP 控制浏览器 vs Selenium 深度对比
  • 预测模型及超参数:3.集成学习:[1]LightGBM
  • LangChain实战(三):深入理解Model I/O - Prompts模板
  • 顶会顶刊图像分类的云服务器训练方法
  • 闭包与内存泄漏:深度解析与应对策略
  • Spring boot 启用第二数据源
  • Java全栈工程师的实战面试:从基础到微服务架构
  • 【SOD】目标检测
  • 2025.8.29机械臂实战项目
  • 基于STM32单片机的智能温室控制声光报警系统设计
  • leetcode 461 汉明距离
  • 基于MSRDCN、FEAM与AMSFM的轴承故障诊断MATLAB实现
  • 【工具】开源大屏设计器 自用整理
  • golang接口详细解释
  • websocket的应用
  • 【Spring Cloud Alibaba】前置知识
  • 微信小程序调用蓝牙打印机教程(TSPL命令)
  • Android 14 PMS源码分析
  • Linux-搭建DNS服务器
  • 计算机三级嵌入式填空题——真题库(24)原题附答案速记
  • CMake xcode编译器属性设置技巧
  • JavaScript 数组核心操作实战:最值获取与排序实现(从基础到优化)
  • 线程安全及死锁问题
  • Linux之Docker虚拟化技术(二)