预期在箭头函数的结尾处返回一个值array-callback-return on filter function

时间:2019-02-26 08:03:51

标签: javascript reactjs filter arrow-functions

我正在React中工作,目前收到错误消息“预计将在箭头函数array-callback-return的末尾返回一个值”。我搜索了其他问题,但似乎找不到与min匹配的问题(除非我完全瞎了)。我有以下代码。

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
    for(const measure of self.state.measures) {
      if(measure.id === companyMeasure.measure_type_id) return true;
      else return false;
    }
  });

代码循环遍历两个对象数组,以查找两者之间的匹配。如果我只为比赛返回true,我将理解该错误。但是,如果没有匹配项,我将返回false。结果,我正在努力查看在箭头函数的末尾没有返回值的情况下如何结束。

3 个答案:

答案 0 :(得分:3)

这是因为return仅退出for循环,而不退出Array.prototype.filter()中的整个回调。不用使用for循环来检查companyMeasure.measure_type_id中是否存在self.state.measures,您可以简单地执行一个array map,该方法返回所有ID,然后使用以下方法检查该返回数组是否存在ID: Array.prototype.includes

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
    return self.state.measures.map(m => m.id).includes(companyMeasure.measure_type_id);
  });

更好:

  • 由于您使用的是箭头功能,因此保留了包围范围中的词汇this,因此您甚至根本不需要代理this
  • 您还可以在.filter()回调外部创建数组映射以减少开销
  • 现在.filter()回调是单行代码,我们可以摆脱大括号和take advantage of implicit returns in arrow functions

这是最终代码的样子:

const ids = this.state.measures.map(m => m.id);
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => id.includes(companyMeasure.measure_type_id));

答案 1 :(得分:0)

要么:

  1. 循环开始
  2. 您将获得第一个measure
  3. 条件为true,并且您返回true
  4. 您永远不会前进到第二个measure

或者:

  1. 循环开始
  2. 您将获得第一个measure
  3. 条件为假,您返回假
  4. 您永远不会前进到第二个measure

摆脱else并将return false移到循环后的 ,这样它只有在到达循环末尾而没有找到匹配项时才运行。 / p>

答案 2 :(得分:0)

const self = this;
const relevantCompanyMeasures = this.props.companyMeasures
  .filter(companyMeasure => {
             return self.state.measures.map(meas => meas.id).indexOf(companyMeasure.measure_type_id)!=-1
    }
   );

尝试一下