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

Angular项目中如何用TypeScript过滤Firm数组匹配指定domain

Angular项目中实现Firm数组过滤的current方法

我正在开发一个Angular项目,需要过滤Firm类型数组,找出其中domain属性等于当前类中this.domain的元素。我初步写的思路代码如下:

let firms: Array<any> = this.firms.filter( (this.firms) => { if (firms.domain===this.domain) } )

以下是当前的FirmService代码,需要完善current方法实现该过滤逻辑:

import {Injectable} from '@angular/core';
import {FirmProvider} from '../../providers/business/firm/firm.provider';
import {Firm} from "../../providers/business/firm/firm";

@Injectable({
  providedIn: 'root',
})
export class FirmService {
  protected domain: string;
  protected firms: Firm[] = [];
  protected initialized: boolean = false;

  constructor(private firmProvider: FirmProvider) {
    this.domain = window.location.hostname.replace(/.\w+.\w+$/ig, '');

    if (this.initialized) {
      this.firmProvider
        .getAll()
        .then((firms) => {
          this.firms = firms;
          this.initialized = true;
          return firms;
        });
    }
  }

  all = (): PromiseLike<Firm[]> => {
    if (this.initialized) {
      return new Promise<Firm[]>((resolve) => {resolve(this.firms)});
    }

    return this.firmProvider
      .getAll()
      .then((firms) => {
        this.firms = firms;
        this.initialized = true;
        return firms;
      });
  }

  current() {
   
    // filter array of firms to find firm where domain is equal to this.domain
  }
}

问题修正与方法实现

你的初始过滤代码存在几个问题:

  • 箭头函数参数命名错误,不能用this.firms作为参数名,应该传入单个Firm对象(比如firm)
  • 箭头函数内没有返回判断结果,filter要求回调函数返回布尔值
  • 类型声明应使用Firm[]而非Array<any>,保证类型安全

另外要注意,firms数据可能还未初始化,所以current方法需要和all方法保持一致的异步逻辑,返回Promise<Firm | undefined>(避免找不到匹配项时的类型问题)。

完善后的current方法如下:

current(): Promise<Firm | undefined> {
  // 确保firms数据已加载完成
  return this.all().then(firms => {
    // 找到第一个domain匹配的元素,若需多个匹配项可改用filter
    return firms.find(firm => firm.domain === this.domain);
  });
}

补充说明

  • 使用find而非filter:如果只需要第一个匹配项,find更高效,找到匹配项后会立即停止遍历;若需多个匹配结果,再替换为filter返回数组
  • 异步处理:通过this.all()保证无论数据是否初始化,都能获取到最新的firms数组,避免未加载完成时的空数组问题
  • 类型安全:明确返回类型为Firm | undefined,调用方可清晰处理找不到匹配项的边界情况

内容的提问来源于stack exchange,提问作者new brain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:22:40