用两个参数\参数过滤

时间:2018-11-21 11:41:27

标签: arrays angular typescript

我有一个应该返回列表的方法。 我想按两个参数而不是一个参数过滤数据。 到目前为止,我已经完成了以下操作,但这是不想要的结果,所以我可能做错了一些事情

performFilterByRunnerName(
  filterByCompetition: string, filterByRunnerName: string
): IRunners[] {
return this.runners
  .filter(x => x.runnerName === filterByRunnerName)
  .filter(x => x.competitionId === filterByCompetition);
}

3 个答案:

答案 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 ) );
}

如果最终的结果是“获取符合这两个条件的所有对象”,则应可预测地运行。

相关问题