循环前过滤数组值:如何排除对应带有.empty-box类的id数组项
优化方案
方案1:极简直接筛选(适合小数据量场景)
直接在filter中判断对应DOM元素是否包含empty-box类,无需提前收集空盒子ID,代码更精简:
const list = myArray.filter(item => !$(`.box[data-id="${item.id}"]`).hasClass('empty-box'))
方案2:高性能版本(适合大数据量场景)
将空盒子ID存入Set结构(查找复杂度O(1),远优于数组includes的O(n)),同时用jQuery的map方法简化ID收集逻辑,比原实现性能更高、代码更简洁:
const emptyIdSet = new Set($('.empty-box').map((_, el) => $(el).data('id')).get()) const list = myArray.filter(item => !emptyIdSet.has(item.id))
方案对比
- 方案1代码更短、可读性更高,适合数组长度小于100的常规场景
- 方案2仅遍历一次empty-box节点,后续筛选的查找效率更高,适合数组长度大、DOM节点多的场景
原实现逻辑是完全正确的,以上方案是在可读性、性能层面的优化。
内容的提问来源于stack exchange,提问作者runnerDev
相关产品推荐
相关产品推荐

