如何简化这个表达式?
How do I simplify this expression?
var inventory = [
{ id: 1, name: 'apples', quantity: true },
{ id: 2, name: 'apples', quantity: false },
{ id: 3, name: 'cherries', quantity: true }
];
var result = inventory.find(inv => inv.id === 5) ? true: false;
Sonarqube 建议简化下面的表达式 -
var result = inventory.find(inv => inv.id === 5) ? true: false;
我不知道如何简化它。任何人都可以帮助简化这个吗?
Sonarqube 建议布尔文字不应该是多余的。
Sonarqube 表示 return 根据条件直接布尔值是很明显的。考虑以下因素:
if (condition) {
return true;
} else {
return false;
}
或同等学历:
return (condition) ? true : false;
condition
本身计算为 true
或 false
,所以它就像说 'if true then true, if false then false'。因此,return 条件本身的结果就足够了,像这样:
return (condition);
现在,您的特定示例通过在布尔上下文中使用 find()
return 值(由 ?:
运算符暗示)隐式合并为布尔值。由于 find()
returns undefined
当未找到请求的对象时,您的代码使用 falsy 的 undefined
值将 ?:
解析为真或假分支。您似乎有兴趣检查数组中是否存在该值,这意味着 find()
return 是否是 undefined
之外的其他值,意思是:
var result = inventory.find(inv => inv.id === 5) !== undefined;
var inventory = [
{ id: 1, name: 'apples', quantity: true },
{ id: 2, name: 'apples', quantity: false },
{ id: 3, name: 'cherries', quantity: true }
];
var result = inventory.find(inv => inv.id === 5) ? true: false;
Sonarqube 建议简化下面的表达式 -
var result = inventory.find(inv => inv.id === 5) ? true: false;
我不知道如何简化它。任何人都可以帮助简化这个吗? Sonarqube 建议布尔文字不应该是多余的。
Sonarqube 表示 return 根据条件直接布尔值是很明显的。考虑以下因素:
if (condition) {
return true;
} else {
return false;
}
或同等学历:
return (condition) ? true : false;
condition
本身计算为 true
或 false
,所以它就像说 'if true then true, if false then false'。因此,return 条件本身的结果就足够了,像这样:
return (condition);
现在,您的特定示例通过在布尔上下文中使用 find()
return 值(由 ?:
运算符暗示)隐式合并为布尔值。由于 find()
returns undefined
当未找到请求的对象时,您的代码使用 falsy 的 undefined
值将 ?:
解析为真或假分支。您似乎有兴趣检查数组中是否存在该值,这意味着 find()
return 是否是 undefined
之外的其他值,意思是:
var result = inventory.find(inv => inv.id === 5) !== undefined;