如何解决TS中“每个”功能的TypeError
我正在研究一个根据工作时间表和用户的个人可用性过滤工作的项目。
const jobs: JobRecord[] = [
{
"storeName": "Highwire Coffee Company","schedule": [
"Tuesday","Thursday",],...
},{
"storeName": "Blue Bottle Coffee","rid": "recNgeUMcYhWUxw8b","schedule": [
"Thursday",]
const availability: Availability = {
"friday": false,"monday": false,"thursday": true,"tuesday": false,"wednesday": true,}
例如,考虑到以上这些输入,我应该制作一个仅返回商店名称为“ Blue Bottle Coffee”的作业的函数。
为此,我编写了这两个函数。
findAvailableDays (availability: Availability){
var availDays: string[];
availDays = [];
for (const [day,avail] of Object.entries(availability)){
if (avail){
availDays.push(day);
}
}
return availDays;
};
filterJobs = (jobs: JobRecord[],availability: Availability): void => {
// Step 0: Clone the jobs input
const newJobs: JobRecord[] = cloneDeep(jobs);
console.log(newJobs,availability);
// Step 1: Remove jobs where the schedule doesn't align with the users' availability.
for (const[store,schedule] of Object.entries(jobs)){
var availDays: string[];
availDays = this.findAvailableDays(availability);
const checkIncludes = (currentValue) => availDays.includes(currentValue);
let checker = (availDays,schedule) => schedule.every(checkIncludes(checkIncludes));
if(!checker(availDays,schedule)){
delete newJobs[store];
}
}
// Step 2: Save into state
this.setState({ jobs: newJobs });
};
但是,我在filterJobs中的every()函数总是遇到错误(如下所示)。我已经检查过Every()接受函数作为参数(我确定),并且可以在数组上工作(我相信schedule应该是一个数组,给出示例)。我在做什么错/想念这里?我是否应该尝试寻找另一种解决方法?
解决方法
schedule
不是数组,而是JobRecord
。您可能是这样说的,其中schedule
从JobRecord
的结构上被破坏了:
for (const [store,{schedule}] of Object.entries(jobs)) {
但是,编写整个内容的更好方法是不按索引删除–改为使用filter
:
filterJobs = (jobs: JobRecord[],availability: Availability): void => {
const availDays = this.findAvailableDays(availability);
const filteredJobs = jobs.filter(({schedule}) =>
schedule.every(day => availDays.includes(day)));
this.setState({ jobs: filteredJobs });
};
顺便说一句,您似乎需要考虑availability
的属性名称和schedule
的元素之间的大小写差异。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。