对象 属性 命名为 ?在 Angular 中无法在地图内部工作

Object Property named with ? not working inside map in Angular

我是 Angular、job.job_company_companyNamethe job.job_company.locationjob.jobTitle 的新手,work/can 都将根据过滤器进行搜索: 但是当我添加带有问号 (?) 的 Jobs 对象时,例如:job.job_details?.jobCountryjob.job_details?.jobCity? 它们没有被过滤,上面的 3 行被过滤除了下面的两行。

你认为我应该怎么做才能让这件事发挥作用?
要改变什么?
为什么带问号的属性不能正常使用?

这是我的 search.component.ts

this.filteredList$ = combineLatest(this.list$, this.filter$).pipe(
  map(([jobs, filterString]) =>jobs.filter(job => 
    job.job_company.companyName.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.jobTitle.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_company.location.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_details?.jobCountry.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 ||
    job.job_details?.jobCity?.toLowerCase().indexOf(filterString.toLowerCase()) !== -1 
    )),
  tap(filtered => {
    this.allJobs = filtered;
    return this.jobsChunk = filtered.slice(0, 9)
  })
);

继承人jobs.model.ts

export interface Jobs {
  jobsId: string;
  jobTitle: string;
  job_details?: JobDetails;
  job_package: JobPackage;
  job_status: JobStatus;
  job_company: CompanyProfile;
  createdDate?: string;
}

export interface JobDetails {
  jobCity?: string;
  jobCountry: string;
  jobType: string;
  jobCategory: string;
  jobTags: string[];
  jobDescription: string;
}

export interface CompanyProfile {
  companyName: string;
  location: string; 
}

您的条件实现有问题,在这种情况下:

job.job_details?.jobCity?.toLowerCase().indexOf(filterString.toLowerCase()) !== -1

如果 job_detailsjobCity 未定义,比较将是 undefined !== -1,它将是 true

一个简单的方法是使用 > -1 而不是 !== -1 条件。

或勾选属性前的:

job.job_details?.jobCity && job.job_details.jobCity.toLowerCase().indexOf(filterString.toLowerCase()) !== -1