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

📝 数组交集实现总结

1. for 循环逐个比较

js 复制代码
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(函数式写法)

js 复制代码
function intersection(...arrays) {
  return arrays.reduce((acc, cur) => acc.filter(item => cur.includes(item)));
}

✅ 一行搞定,语法优雅

❌ 和方法 1 性能一样,难理解一点


3. every 检查法

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

✅ 逻辑清晰:只要某元素存在于所有数组中就保留

❌ 性能中等,跟 1/2 类似


4. Set 优化

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

✅ 用 Set 去重,避免重复元素,查询更快

❌ 还是会用到 includes,性能一般


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

js 复制代码
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 计数)。
相关推荐
LawrenceLan14 小时前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客14 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz14 小时前
C语言第1章
c语言·开发语言
行者9615 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon15 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio15 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词15 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派16 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx16 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie11451419117 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式