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应该是一个数组,给出示例)。我在做什么错/想念这里?我是否应该尝试寻找另一种解决方法

enter image description here

解决方法

schedule不是数组,而是JobRecord。您可能是这样说的,其中scheduleJobRecord的结构上被破坏了:

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的元素之间的大小写差异。