👉 求:新数组 - 旧数组(差集)
也就是:
👉 新数组里有,但旧数组里没有的值
一、最简单直接(推荐)✅
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