我正在使用自定义过滤器来创建排序顺序,但至少是第一个,然后是下一个,但出现错误 "ERROR TypeError: Cannot read property 'filter' of undefined"
。
请帮我解决,因为它不允许在页面上呈现任何内容。
我需要进行哪些更改才能解决此问题?任何帮助表示赞赏。
table-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;
}
}
答案 0 :(得分:2)
该错误表明您正在调用“.filter”的对象之一未定义。那将是以下几行之一:
const keys = Object.keys(filters).filter
user["assigned_to"].filter
user
没有这个属性或者它不是一个数组,将会失败。let filterData = assign.filter
lowestScore
将失败 undefined
答案 1 :(得分:1)
错误消息是这样抱怨的:
return keys.length ? list.filter(filterUser) : list;
当您的 list
未定义,而您有 keys
时,它会尝试执行 list.filter
,因为 list
未定义,您会收到这样的错误。