我正在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。结果,我正在努力查看在箭头函数的末尾没有返回值的情况下如何结束。
答案 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)
要么:
measure
measure
或者:
measure
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
}
);
尝试一下