ES6数组排除逻辑最佳实践:保留ID不在指定集合中的对象
ES6 最佳实践:实现数组对象的排除逻辑
嘿,我来帮你搞定这个问题!你现在的问题是把要移除的对象误赋值给了this.data,本质是过滤条件写反了。在ES6里,用filter配合includes(或者优化成Set)就能完美实现「排除ID在选中列表里的对象」的需求。
基础实现方案
最直接的写法是用Array.prototype.filter,它会返回一个符合条件的新数组,正好适合这种筛选场景:
// 保留所有ID不在multipleSelectedIds中的对象 this.data = this.data.filter(item => !this.multipleSelectedIds.includes(item.id));
这里的逻辑很清晰:
filter遍历原数组的每一个item!this.multipleSelectedIds.includes(item.id)判断当前item的ID不在选中列表里- 所有满足这个条件的item会被保留到新数组,最后赋值给
this.data
性能优化方案(处理大数据量)
如果你的multipleSelectedIds数组很大,includes的查找效率是O(n),多次调用会影响性能。这时候可以把数组转成Set,因为Set.has()的查找效率是O(1):
// 先把选中ID转成Set提升查找性能 const selectedIdsSet = new Set(this.multipleSelectedIds); // 用Set.has()替代数组.includes() this.data = this.data.filter(item => !selectedIdsSet.has(item.id));
这种写法在数据量较大的时候,性能提升会非常明显。
为什么之前会反?
你之前的代码应该是漏掉了取反符号!,导致把「ID在选中列表里的对象」留下来了,现在加上!就正好实现了排除逻辑。另外要注意,filter不会修改原数组,所以需要把返回的新数组重新赋值给this.data,这是符合ES6 immutable(不可变)思想的最佳实践哦。
内容的提问来源于stack exchange,提问作者yariv bar
相关产品推荐
相关产品推荐

