You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:05:56