繁体   English   中英

期望在过滤函数的箭头函数array-callback-return结尾处返回一个值

[英]Expected to return a value at the end of arrow function array-callback-return on filter function

我正在使用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。 结果,我很难看到如何在箭头函数结束时没有返回值的情况下结束。

这是因为return只退出for循环,而不是Array.prototype.filter()的整个回调。 相反,使用循环来检查的companyMeasure.measure_type_id中存在self.state.measures ,你可以简单地做一个阵图 ,它返回所有的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()回调是一个单行,我们可以摆脱大括号并利用箭头函数中的隐式返回

以下是最终代码的外观:

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

或者:

  1. 循环开始
  2. 你得到了第一个measure
  3. 条件是真的,你返回true
  4. 你永远不会进入第二个measure

要么:

  1. 循环开始
  2. 你得到了第一个measure
  3. 条件为false,您返回false
  4. 你永远不会进入第二个measure

摆脱else并将return false移动到循环之后 ,因此只有在到达循环结束时才会运行而不会找到匹配项。

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

尝试这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM