SonarQube提示“filter返回值必须被使用”问题求助
SonarQube报错原因与修复方案
提示含义解释
Array.prototype.filter 是专门用于返回符合条件的新数组的数组方法,规范要求其回调函数必须返回布尔值,且方法返回的新数组必须被业务逻辑使用。你的写法存在两个不符合规范的点:
- 把filter当成普通遍历方法使用,仅在回调中修改外部变量
statusFilter,完全没有使用filter返回的新数组- filter的回调函数没有显式返回布尔值,不符合filter的语法要求
推荐修复方案
- 方案1:使用语义完全匹配的
some方法(最优)some方法的作用就是判断数组中是否存在至少一个符合条件的项,找到第一个匹配项后就会终止遍历,性能最好,代码可直接简化为:
const statusFilter = this.columnList.some(obj => obj.attributeName === gridStaticColumns.licenseStatus && obj.attributeDataType === AttributeDataTypes.staticValueList );
- 方案2:如果确实需要遍历执行副作用(当前场景不适用,仅做通用参考),请使用
forEach方法,forEach本身就是设计用来执行遍历副作用的方法,没有返回值,符合语义:
let statusFilter = false; this.columnList.forEach(obj => { if(obj.attributeName === gridStaticColumns.licenseStatus && obj.attributeDataType === AttributeDataTypes.staticValueList){ statusFilter = true; } })
- 方案3:坚持使用filter的修复方式(不推荐,全量遍历性能低于some)
正确使用filter的返回值,通过判断过滤结果的长度确认是否存在匹配项:
const matchedColumns = this.columnList.filter(obj => obj.attributeName === gridStaticColumns.licenseStatus && obj.attributeDataType === AttributeDataTypes.staticValueList ); const statusFilter = matchedColumns.length > 0;
以上三种方案都可以解决SonarQube的报错,优先推荐方案1,代码更简洁、性能更优、语义更清晰。
内容的提问来源于stack exchange,提问作者vamsi
相关产品推荐
相关产品推荐

