如何从.filter()返回布尔值

时间:2018-06-19 14:52:13

标签: javascript

我想知道如何返回布尔值,以指示.filter()中条件的评估,如下代码所示。

当我执行代码时,我得到了一个数组,但是我想根据以下条件的评估得出真假

program instanceof Program
&& program.getHeader().getSpace() === ProgramSpace.C_R
&& program.isConfigTag('Mu'))

代码

this._featureContr.getPrograms().filter((program) =>
      program instanceof Program
      && program.getHeader().getSpace() === ProgramSpace.C_R
      && program.isConfigTag('Mu'));
}

2 个答案:

答案 0 :(得分:1)

JS数组具有两个可能对您有用的函数,everysome

  

every()方法测试数组中的所有元素是否通过提供的函数实现的测试。

     

some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。

因此,根据您想要的结果,您可以执行以下操作:

this._featureContr.getPrograms()
  .every((program) =>
    program instanceof Program &&
    program.getHeader().getSpace() === ProgramSpace.C_R &&
    program.isConfigTag('Mu'));
}

this._featureContr.getPrograms()
  .any((program) =>
    program instanceof Program &&
    program.getHeader().getSpace() === ProgramSpace.C_R &&
    program.isConfigTag('Mu'));
}

如果想要的是测试结果的数组,则应使用map

this._featureContr.getPrograms()
  .map((program) =>
    program instanceof Program &&
    program.getHeader().getSpace() === ProgramSpace.C_R &&
    program.isConfigTag('Mu'));
}

答案 1 :(得分:0)

过滤器返回一个数组。 在您的情况下,您需要使用reduce:reduce - MSDN

this._featureContr.getPrograms().reduce(function(p,n){
     return p && (n instanceof Program
          && n.getHeader().getSpace() === ProgramSpace.C_R
          && n.isConfigTag('Mu'));
},true)

以p为真开始,然后迭代并为每个(下一项)n应用条件,然后将结果作为下一个p返回到下一个版本。