You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历数组并删除filterValueList为空的对象 附TypeScript业务代码

实现方案

你原有代码的核心问题是删除空filterValueList对应对象的逻辑错误,且两个处理函数重复代码过多,可按如下方式修改:

优化后完整代码(抽离公共逻辑,减少冗余)

// 给FilterCriterias添加明确类型,避免any类型隐藏问题
FilterCriterias: Array<{filtercolumnName: string, filterValueList: string[]}> = []

// 抽离公共的筛选规则更新方法
private updateFilter(columnName: string, filterValue: any) {
  // 查找当前列是否已经存在筛选规则
  const existRule = this.FilterCriterias.find(item => item.filtercolumnName === columnName)
  
  if (existRule) {
    const valueIndex = existRule.filterValueList.indexOf(filterValue.name)
    if (valueIndex >= 0) {
      // 已选中该值,执行取消选中移除
      existRule.filterValueList.splice(valueIndex, 1)
    } else {
      // 未选中该值,添加到筛选列表
      existRule.filterValueList.push(filterValue.name)
    }
  } else {
    // 没有对应列的筛选规则,新增规则
    this.FilterCriterias.push({
      filtercolumnName: columnName,
      filterValueList: [filterValue.name]
    })
  }

  // 过滤空值规则+去重二合一:直接排除filterValueList为空的项,同时过滤同列重复规则
  this.FilterCriterias = this.FilterCriterias.reduce((result, current) => {
    if (current.filterValueList.length > 0 && !result.find(item => item.filtercolumnName === current.filtercolumnName)) {
      result.push(current)
    }
    return result
  }, [] as typeof this.FilterCriterias)

  console.log('filtered', this.FilterCriterias)
}

// 产品类型变更直接调用公共方法
public productChanged(filterValue: any) {
  this.updateFilter('productType', filterValue)
}

// 合集变更直接调用公共方法
public collectionChanged(filterValue: any) {
  this.updateFilter('collections', filterValue)
}

最小改动方案(不抽离公共逻辑,仅修改原有代码)

如果不想调整原有代码结构,只需要在两个函数的去重reduce逻辑中增加空值判断,同时把过滤后的结果赋值回原数组即可,修改如下:

// 把原有去重的reduce代码替换为以下内容
var filtered = this.FilterCriterias.reduce((filtered: any, item: any) => {
  // 新增item.filterValueList.length > 0判断,过滤空值规则
  if(item.filterValueList.length > 0 && !filtered.some((filteredItem: any) => filteredItem.filtercolumnName === item.filtercolumnName)) {
    filtered.push(item)
  }
  return filtered
}, [])
// 把过滤后的结果赋值回原数组
this.FilterCriterias = filtered
console.log('filtered',filtered);

内容的提问来源于stack exchange,提问作者Kumaravel A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:45:03