高效处理数组差异:JS中新增、删除、交集的最优解(Set实现)

👉 求:新数组 - 旧数组(差集)

也就是:

👉 新数组里有,但旧数组里没有的值


一、最简单直接(推荐)✅

js 复制代码
const oldArr = ['a', 'b', 'c']
const newArr = ['b', 'c', 'd', 'e']

const added = newArr.filter(item => !oldArr.includes(item))

console.log(added) // ['d', 'e']

✔ 语义清晰

✔ 适合数据量不大(<1万)


二、性能更优(推荐大数据)🔥

👉 用 Set,避免 includes 的 O(n)

js 复制代码
const oldArr = ['a', 'b', 'c']
const newArr = ['b', 'c', 'd', 'e']

const oldSet = new Set(oldArr)

const added = newArr.filter(item => !oldSet.has(item))

console.log(added) // ['d', 'e']

✔ 时间复杂度:O(n)

✔ 实际项目推荐用这个


三、如果你还想知道"删除了哪些"👇

👉 顺手一起算(很常见)

js 复制代码
const oldArr = ['a', 'b', 'c']
const newArr = ['b', 'c', 'd', 'e']

const oldSet = new Set(oldArr)
const newSet = new Set(newArr)

// 新增
const added = newArr.filter(item => !oldSet.has(item))

// 删除
const removed = oldArr.filter(item => !newSet.has(item))

console.log('新增:', added)   // ['d','e']
console.log('删除:', removed) // ['a']

四、封装一个通用方法(生产可用)🔥

js 复制代码
function diffArray(oldArr, newArr) {
  const oldSet = new Set(oldArr)
  const newSet = new Set(newArr)

  return {
    added: newArr.filter(item => !oldSet.has(item)),
    removed: oldArr.filter(item => !newSet.has(item)),
    common: newArr.filter(item => oldSet.has(item))
  }
}

用法:

js 复制代码
const res = diffArray(
  ['a','b','c'],
  ['b','c','d','e']
)

console.log(res)
/*
{
  added: ['d','e'],
  removed: ['a'],
  common: ['b','c']
}
*/

五、你这个场景的本质总结

👉 你其实在做的是:

  • 新增 = new - old
  • 删除 = old - new
  • 交集 = old ∩ new

六、一句话记住

👉 判断"有没有" → 用 Set

👉 判断"差异" → 用 filter + has


相关推荐
2603_965896622 小时前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
拉格朗日(Lagrange)2 小时前
【第2 章】WorkBuddy 从入门到高手
开发语言·python
yujunl2 小时前
在U9C订单列表上开放多个按钮层叠的问题解决
开发语言
喆星时瑜3 小时前
Win10/11 安装 R 与 RStudio 详细图文教程
开发语言·r语言·安装
JustHappy3 小时前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
心中有你02143 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
codeGoogle3 小时前
Vue3 UIKit 实战:把聊天、会话、主题和移动端适配全部封装好
前端
言乐63 小时前
Python自动去除水印
开发语言·python·django·virtualenv·pygame
大圣编蚕3 小时前
C语言入门:基本语法汇总
c语言·开发语言
czq_26867194873 小时前
Python打卡第31天
开发语言·python