如何正确过滤掉一个数组中存在于另一数组内的元素
问题解决方法
你当前的代码逻辑是保留array1中存在于array2的元素,和你需要的「移除存在于array2的元素」逻辑相反,只需在array2.includes前加逻辑非运算符!取反即可:
array1.filter( element => !array2.includes( element ) );
性能优化方案
如果array2的元素数量较多,建议先把array2转换为Set类型,能大幅降低查询的时间复杂度:
- 直接用
Array.includes每次查询的时间复杂度为O(n),array2越长性能越低 - 转换为
Set后用Set.has查询的时间复杂度为O(1),不受数据量影响
优化后代码示例:
const excludeSet = new Set(array2); const filteredArray = array1.filter(element => !excludeSet.has(element));
效果验证示例
const array1 = [1, 2, 3, 4, 5, 6]; const array2 = [2, 4, 6]; const result = array1.filter(element => !array2.includes(element)); // 最终result的值为 [1, 3, 5]
内容的提问来源于stack exchange,提问作者nothing special
相关产品推荐
相关产品推荐

