对象 属性 命名为 ?在 Angular 中无法在地图内部工作
Object Property named with ? not working inside map in Angular
我是 Angular、job.job_company_companyName
、the job.job_company.location
和 job.jobTitle
的新手,work/can 都将根据过滤器进行搜索: 但是当我添加带有问号 (?) 的 Jobs 对象时,例如:job.job_details?.jobCountry
和 job.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_details
或 jobCity
未定义,比较将是 undefined !== -1
,它将是 true
。
一个简单的方法是使用 > -1
而不是 !== -1
条件。
或勾选属性前的:
job.job_details?.jobCity && job.job_details.jobCity.toLowerCase().indexOf(filterString.toLowerCase()) !== -1
我是 Angular、job.job_company_companyName
、the job.job_company.location
和 job.jobTitle
的新手,work/can 都将根据过滤器进行搜索: 但是当我添加带有问号 (?) 的 Jobs 对象时,例如:job.job_details?.jobCountry
和 job.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_details
或 jobCity
未定义,比较将是 undefined !== -1
,它将是 true
。
一个简单的方法是使用 > -1
而不是 !== -1
条件。
或勾选属性前的:
job.job_details?.jobCity && job.job_details.jobCity.toLowerCase().indexOf(filterString.toLowerCase()) !== -1