在条件表达式中不必要地使用布尔文字

时间:2018-04-22 22:25:28

标签: javascript ternary-operator eslint

我有一个函数检查是否在数组中找到了值。我想要回归真假。当前代码有效但抛出js-standerd / es-lint错误"在条件表达式中不必要地使用布尔文字" 我在这里搜索了大量这些错误消息,但似乎无法绕过它。对我来说这说'如果找到的值,则返回true,否则为false'

let found = value.find(val => {
  return val === item
})
return found ? true : false

我试过这个

  return value.find(val => {
     return val === item
   }) || false

哪个有效,但如果找不到则返回布尔值,它返回项目。

我知道我可以通过多种方式完成这项工作,但我只想弄清楚我的代码是错误还是错误,或者es-lint是否标记错误。

2 个答案:

答案 0 :(得分:3)

linter抱怨这个:

return found ? true : false

它说,如果found是真实的,则返回true,否则返回false。这种结构被称为“三元”算子,并且从C的早期开始使用,如果不是之前的话。 ?运算符会在左侧调整条件,如果条件已计算为true,则返回第一个参数,否则返回false。

代码的问题在于返回条件本身相当于返回布尔文字truefalse。因此,检查和文字是不必要的,可以删除。虽然,因为这是javascript你可能想要在返回它之前加倍否定条件,强制它是一个布尔值。所以,结果如下:

return !!found

这更容易阅读,并且将来实施错误或误解的可能性较小。

当然,这可以采取进一步措施:

return !!value.find(val => {
  return val === item
})

通过这种方式,您甚至不需要在代码中引入符号found。另外,对于some(),这会更好,但我认为你的问题更多的是关于三元运算符而不是如何搜索列表。

答案 1 :(得分:-1)

return value.some(val => { return val === item; });