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

Angular下拉选单去重问题:过滤用下拉框选项重复需优化

解决Angular mat-select下拉选项重复问题

你的核心问题是原代码中判断数组是否存在元素的逻辑错误,导致重复项被添加到persons数组里。下面是具体的修复方案:

问题根源

原代码里用element.registerBy in this.persons来判断是否已存在该用户,但in操作符是用来检查对象的属性名,而persons是数组,这个判断永远返回false,所以所有registerBy的值都会被push进数组,造成重复。

修复方案

方案1:使用Set快速去重(推荐)

直接利用ES6的Set数据结构自动去重的特性,一行代码搞定:

// 在loadData()函数内替换原循环逻辑
this.persons = [...new Set(this.currentHistory.map(item => item.registerBy))];

原理:先把currentHistory里所有registerBy的值提取成数组,再转成Set自动去重,最后用扩展运算符...转回数组。

方案2:用数组includes方法判断

如果需要兼容旧环境,或者更直观的逻辑,可以用Array.includes()来检查元素是否已存在:

// 在loadData()函数内替换原循环逻辑
this.persons = [];
this.currentHistory.forEach((element: any) => {
  // 检查当前registerBy是否已在persons数组中
  if (!this.persons.includes(element.registerBy)) {
    this.persons.push(element.registerBy);
  }
});

其他说明

  • HTML部分代码无需修改,过滤功能保持正常运行。
  • 如果需要对去重后的选项排序,可以在去重后加上排序逻辑,比如:
    this.persons = [...new Set(this.currentHistory.map(item => item.registerBy))].sort();
    

内容的提问来源于stack exchange,提问作者Renatta Quiroz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57