如何从一个数组中移除另一个数组包含的元素?
问题解决:从arrayOne中移除arrayTwo的元素
你之前的代码逻辑有误:在filter回调里,你把单个数值item和整个数组arrayTwo做比较,这两者永远不会相等,所以filter会保留arrayOne里的所有元素,自然得不到预期结果。
下面是两种可行的解决方法:
方法一:使用Array.includes()
直接在filter中判断当前元素是否不在arrayTwo内:
let arrayOne = [1669683600000, 1669770000000, 1669698000000, 1669755600000]; let arrayTwo = [1669683600000, 1669770000000]; let results = arrayOne.filter(item => !arrayTwo.includes(item)); console.log('results: ', results);
执行后会输出预期结果:[1669698000000, 1669755600000]。
方法二:使用Set优化性能(适合大数据量场景)
如果arrayTwo包含大量元素,includes()每次遍历的效率较低。将arrayTwo转为Set后,查找操作的时间复杂度变为O(1),性能更优:
let arrayOne = [1669683600000, 1669770000000, 1669698000000, 1669755600000]; let arrayTwo = [1669683600000, 1669770000000]; const excludeSet = new Set(arrayTwo); let results = arrayOne.filter(item => !excludeSet.has(item)); console.log('results: ', results);
内容的提问来源于stack exchange,提问作者SirBT
相关产品推荐
相关产品推荐

