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

如何基于自定义输入过滤对象数组(多选下拉场景)

问题解决方法

你的核心问题是每次筛选后将结果追加到finalArr,而非替换原有内容,同时代码可以更简洁高效。以下是修正方案:

1. 直接替换结果数组(推荐)

不需要用forEach循环逐个筛选后追加,利用数组的filter和includes方法,直接生成新的过滤结果并赋值给finalArr,覆盖原有内容:

针对ServiceArea筛选:

// 筛选ServiceArea为["NON-CIO"]的项
const serviceAreaFilter = ["NON-CIO"];
this.finalArr = this.airData.filter(item => serviceAreaFilter.includes(item.ServiceArea));

针对ManagingDirector筛选:

// 筛选ManagingDirector为["dfg","qwe"]的项
const mdFilter = ["dfg","qwe"];
this.finalArr = this.airData.filter(item => mdFilter.includes(item.ManagingDirector));

2. 通用筛选函数(适配多字段场景)

如果需要支持不同字段的筛选,可以封装一个通用函数,避免重复代码:

// 通用过滤函数:参数为要筛选的字段名、筛选值数组
filterData(fieldName, filterValues) {
  // 直接赋值覆盖原有结果,而非追加
  this.finalArr = this.airData.filter(item => filterValues.includes(item[fieldName]));
}

// 调用示例:
// 第一次筛选ServiceArea
this.filterData("ServiceArea", ["NON-CIO"]);
// 第二次筛选ManagingDirector
this.filterData("ManagingDirector", ["dfg","qwe"]);

3. 原代码问题分析

你之前的代码用forEach循环每个筛选值,每次筛选后用push.apply追加结果到finalArr,这会导致:

  • 多次筛选的结果叠加,而非替换
  • 重复调用filter遍历整个数组,效率较低

直接用filter + includes可以一次性完成筛选,同时赋值操作会直接替换finalArr的内容,符合你预期的结果。

注意事项

你的示例数组存在语法错误:每个对象的属性末尾缺少逗号(比如第一个对象的"Manager": "xyz"后没有逗号),需修正后才能正常运行。

内容的提问来源于stack exchange,提问作者Rahul Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:29