Javascript 错误类型错误:无法读取属性';过滤器';未定义的。我该如何解决这个问题?

Javascript 错误类型错误:无法读取属性';过滤器';未定义的。我该如何解决这个问题?,javascript,angular,typescript,undefined,Javascript,Angular,Typescript,Undefined,我正在使用自定义筛选器创建排序顺序,但至少从第一个开始,然后是下一个,但出现错误“错误类型错误:无法读取未定义的属性'filter'” 请帮助我修复,因为它不允许在页面上呈现任何内容 要解决此问题,我需要做哪些更改?感谢您的帮助 表-filter.pipe.ts import { Pipe, PipeTransform } from "@angular/core"; @Pipe({ name: "tableFilter" }) export clas

我正在使用自定义筛选器创建排序顺序,但至少从第一个开始,然后是下一个,但出现错误
“错误类型错误:无法读取未定义的属性'filter'”

请帮助我修复,因为它不允许在页面上呈现任何内容

要解决此问题,我需要做哪些更改?感谢您的帮助

表-filter.pipe.ts

import { Pipe, PipeTransform } from "@angular/core";

@Pipe({
  name: "tableFilter"
})
export class TableFilterPipe implements PipeTransform {
  transform(list: any[], filters: any) {
    //console.log("table-filter", list);
    const keys = Object.keys(filters).filter(key => filters[key]);
    const filterUser = (user: { [x: string]: any }) =>
      keys.every(key => {
        if (key == "sdob") {
          return (
            new Date(user["dob"]) >=
            new Date(new Date(filters[key]).setHours(0, 0, 0, 0))
          );
        } else if (key == "edob") {
          return (
            new Date(new Date(filters[key]).setHours(0, 0, 0, 0)) >=
            new Date(user["dob"])
          );
        } else if (
          key === "dl" &&
          user["assigned_to"].filter((e: { dl: any }) => e.dl === filters[key])
            .length
        ) {
          return user;
        } else if (key === "score") {
          const low = filters[key] === "20" && user["score"] <= filters[key];
          const medium =
            filters[key] === "50" && user["score"] < 50 && user["score"] >= 21;
          const high =
            filters[key] === "70" && user["score"] < 70 && user["score"] >= 51;
          const veryHigh = filters[key] === "71" && user["score"] >= 71;
          if (low || medium || high || veryHigh) {
            return user[key];
          }
        } else {
          return user[key] === filters[key];
        }
    });    

    if(list) {
      let filterList = list.filter(filterUser);
      list.sort((lhs, rhs) =>this.lowestScore(lhs.assigned_to) - this.lowestScore(rhs.assigned_to));
    }
    //console.log(filterList, list);

    return keys.length ? list.filter(filterUser) : list;
  }
  
  lowestScore(assign: any) {
    //console.log("assign ", assign);
    let filterData = assign.filter(item => Number(item.co_score));
    let leastScrore = Math.min(...filterData.map(item => item.co_score));
    //console.log("least ", leastScrore);
    return leastScrore;
  }
}
从“@angular/core”导入{Pipe,PipeTransform};
@烟斗({
名称:“tableFilter”
})
导出类TableFilterPipe实现PipeTransform{
变换(列表:任意[],过滤器:任意){
//日志(“表过滤器”,列表);
const keys=Object.keys(filters.filter)(key=>filters[key]);
常量filterUser=(用户:{[x:string]:any})=>
键。每个(键=>{
如果(键==“sdob”){
返回(
新日期(用户[“dob”])>=
新日期(新日期(过滤器[键])。设置小时(0,0,0,0))
);
}否则如果(键==“edob”){
返回(
新日期(新日期(过滤器[键])。设置小时数(0,0,0,0))>=
新日期(用户[“dob”])
);
}否则如果(
键==“dl”&&
用户[“分配给”].filter((e:{dl:any})=>e.dl==filters[key])
长
) {
返回用户;
}否则如果(关键点==“分数”){
常量低=过滤器[键]=“20”和用户[“分数”]=21;
恒高=
过滤器[键]==“70”和用户[“分数”]<70和用户[“分数”]>=51;
const veryHigh=filters[key]==“71”和&user[“score”]>=71;
if(低| |中| |高| |极高){
返回用户[键];
}
}否则{
返回用户[key]==过滤器[key];
}
});    
如果(列表){
让filterList=list.filter(filterUser);
list.sort((lhs,rhs)=>this.lowestScore(lhs.assigned_to)-this.lowestScore(rhs.assigned_to));
}
//日志(过滤器列表,列表);
return key.length?list.filter(filterUser):list;
}
最低分数(分配:任何){
//控制台日志(“分配”,分配);
让filterData=assign.filter(item=>Number(item.co_分数));
让leastScrore=Math.min(…filterData.map(item=>item.co_分数));
//console.log(“最小”,最小错误);
归还租赁许可证;
}
}

错误消息是:

returnkeys.length?列表.过滤器(filterUser):列表;

当您的
列表
未定义,并且您有
时,它将尝试执行
列表。筛选器
,因为
列表
未定义,所以您会出现此错误。

此错误表明您正在调用的对象之一.filter”on未定义。这将是以下几行之一:

const keys=Object.keys(过滤器).filter

  • 如果“筛选器”没有键,则将失败。如果不向变换函数传递过滤器,这看起来很可能是一个候选项
用户[“分配给”]筛选

  • 如果
    用户
    没有此属性或它不是数组,则将失败
let filterData=assign.filter

  • 如果通过了
    最低分数
    未定义

在开头检查
如果(!filters){return list}
@NileshPatel我在哪里更新这个?在
const keys=Object.keys(filters.filter(key=>filters[key])之前。它可能在另一个地方破裂。。但是试试看this@NileshPatel列表未定义如何修复此问题?
返回列表(&keys.length)?列表.过滤器(filterUser):列表@randchris感谢您的详细解释。您能帮助我修复它吗?我应该如何处理?如果故障是可重复的,您可以添加“console.log”语句来检查对象,然后再访问它们。如果有一个未定义的对象没有意义,那么需要在代码的其他地方修复它。如果可以接受,只需添加一个检查:
If(undefined==theObject)handle\u it
。确切的情况取决于错误所在的位置以及接下来要发生什么。