预期在过滤器函数的箭头函数 array-callback-return 末尾返回一个值

ale*_*hel 3 javascript filter reactjs arrow-functions

我正在 React 中工作,目前收到错误“预期在箭头函数数组回调返回的末尾返回一个值”。我搜索了其他问题,但似乎找不到与 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;
    }
  });
Run Code Online (Sandbox Code Playgroud)

该代码循环遍历两个对象数组,寻找两者之间的匹配项。如果我只为匹配返回 true,我就会理解这个错误。但是,如果没有匹配项,我会返回 false。因此,我很难想象最终会出现箭头函数末尾没有返回值的情况。

Ter*_*rry 8

这是因为return仅退出for循环,而不是 中的整个回调Array.prototype.filter()。您可以简单地执行一个数组map,它返回所有 ID,然后使用以下命令检查该返回数组是否存在 ID,而不是使用 for 循环来检查是否存在于companyMeasure.measure_type_id中:self.state.measuresArray.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);
  });
Run Code Online (Sandbox Code Playgroud)

更好的是:

  • 由于您使用的是箭头函数,因此保留了封闭范围的词汇,因此您甚至根本this不需要代理this
  • 您还可以在回调之外创建数组映射.filter()以减少开销
  • 现在.filter()回调是单行的,我们可以摆脱大括号并利用箭头函数中的隐式返回

最终代码应如下所示:

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