使用Array.find校验元素存在时报array-callback-return警告是什么原因?
场景适配方法选择
你需要校验对象数组中是否存在符合属性匹配条件的元素,在你提到的几种数组方法中,按适配度排序如下:
- 优先选
find/some:二者都是惰性遍历,找到第一个匹配元素就会终止循环,性能最优。其中some直接返回布尔值,更贴合你需要「是否存在」结果的场景;find返回匹配到的元素本身,如果你后续还需要用到该元素的其他属性也可以选择。 - 不推荐
filter:会遍历整个数组返回所有匹配元素的集合,额外占用内存,性能弱于前两者。 - 不推荐
map:用于数组元素映射转换,和判断存在的场景完全不匹配,无使用价值。 - 不推荐
contains(即JS标准中的includes):仅支持全等匹配,对象数组无法直接用该方法匹配内部属性,强制使用需要先提取所有属性值再判断,会触发两次全量遍历,性能最差。
警告触发原因
你遇到的array-callback-return是ESLint的规则告警:你传入find的箭头函数只有在data.name === proName条件成立时才有明确返回值,条件不成立时函数没有任何返回逻辑,隐式返回undefined,该规则要求数组方法的回调函数在所有代码分支下都有明确的返回值,因此触发告警。
解决方法
直接简化回调写法,返回布尔表达式即可,所有分支都会有明确的布尔返回值:
// 用find的写法 const exist = lists.find(data => data.name === proName) !== undefined // 更适配场景的some写法,直接返回布尔值 const exist = lists.some(data => data.name === proName)
上述写法和你最初的for循环逻辑完全一致,性能也相当。
内容的提问来源于stack exchange,提问作者user15570208
相关产品推荐
相关产品推荐

