我有一个应该返回列表的方法。 我想按两个参数而不是一个参数过滤数据。 到目前为止,我已经完成了以下操作,但这是不想要的结果,所以我可能做错了一些事情
performFilterByRunnerName(
filterByCompetition: string, filterByRunnerName: string
): IRunners[] {
return this.runners
.filter(x => x.runnerName === filterByRunnerName)
.filter(x => x.competitionId === filterByCompetition);
}
答案 0 :(得分:3)
使用&&
运算符
performFilterByRunnerName(
filterByCompetition: string, filterByRunnerName: string
): IRunners[] {
return this.runners
.filter(x => x.runnerName === filterByRunnerName && x.competitionId === filterByCompetition);
}
答案 1 :(得分:1)
依次执行两个过滤器意味着
如果这不是您想要的,则应该解释一下您期望的是什么。
但是要通知您,您有:
OR
.filter(x => x.runnerName === filterByRunnerName || x.competitionId === filterByCompetition);
AND
.filter(x => x.runnerName === filterByRunnerName && x.competitionId === filterByCompetition);
XOR
.filter(x =>
(x.runnerName === filterByRunnerName && !(x.competitionId === filterByCompetition)) ||
(!(x.runnerName === filterByRunnerName) && x.competitionId === filterByCompetition));
答案 2 :(得分:1)
很难确切了解您帖子中的最新情况。但我会尝试一下:
You have a function,
That accepts two values,
and returns an array,
that is first filtered by one value,
which is passed along the pipe,
and is then filtered by the other value.
这与“我正在按两个值过滤数组”不同,这意味着两个过滤器都是简单的“ &&”。他们不是。我已经看到这种细微(尽管很重要)的差异会导致问题很多次。
一种非常简单的处理方法:您可以根据需要在一个过滤器内进行尽可能多的比较。
performFilterByRunnerName(
filterByCompetition: string, filterByRunnerName: string
): IRunners[] {
return this.runners
.filter(x => ( x.runnerName === filterByRunnerName && x.competitionId === filterByCompetition ) );
}
如果最终的结果是“获取符合这两个条件的所有对象”,则应可预测地运行。