filter返回boolean仍触发ESLint错误:箭头函数未确保终值返回
排查ESLint关于Array.prototype.filter()的返回值报错问题
你遇到的ESLint报错“Array.prototype.filter() expects a value to be returned at the end of arrow function”,核心原因是你传给filter的箭头函数存在无返回值的代码路径。
看你代码里的这段filter回调:
return data.filter((item) => { //return groupParents of items that match for (let i of childIds) { if (item.parentId && item.parentId === i) return true; } //return all group that match only group title for (let i of parentIds) { if (item.parentId === i || item.childId === i) return true; } if ( item[labelKey] && item[labelKey].toString().toLowerCase().includes(searchQuery.toString().toLowerCase()) && !item.parentId ) { return true; } });
这段回调里,只有当三个条件中的任意一个满足时才会返回true,但如果所有条件都不满足,函数就没有明确的返回值,默认会返回undefined。而filter要求回调函数必须始终返回布尔值(true或false)来决定当前元素是否被保留,ESLint的array-callback-return规则会检测到这种缺失返回值的情况,从而抛出报错。
修复方案
在回调函数的末尾添加一个明确的return false,确保所有代码路径都有返回值:
return data.filter((item) => { //return groupParents of items that match for (let i of childIds) { if (item.parentId && item.parentId === i) return true; } //return all group that match only group title for (let i of parentIds) { if (item.parentId === i || item.childId === i) return true; } if ( item[labelKey] && item[labelKey].toString().toLowerCase().includes(searchQuery.toString().toLowerCase()) && !item.parentId ) { return true; } // 所有条件都不满足时,明确返回false,过滤掉该元素 return false; });
添加后,无论item是否匹配任何条件,回调函数都会返回一个布尔值,既符合filter的功能要求,也满足ESLint的规则检测。
内容的提问来源于stack exchange,提问作者Garo Gabrielyan
相关产品推荐
相关产品推荐

