【问题标题】:Unnecessary use of Boolean literals in conditional expression在条件表达式中不必要地使用布尔文字
【发布时间】:2018-10-02 22:09:05
【问题描述】:

我有一个函数可以检查是否在数组中找到了一个值。我想返回一个真或假。当前代码有效,但抛出 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 是否有错误地标记它。

【问题讨论】:

  • found 已经可以用作布尔值。您通常根本不需要这样做。
  • 使用!!value.find(...) 将值转换为布尔类型。但正如乔治所说,使用 some 这样你也可以找到错误的值。
  • 使用.some它返回真或假
  • 我已经使用了很多,它在这里工作。我只是喜欢 find 的语法,因为它很容易理解。
  • return found ? true : false 可以完全替换为 return !!found;

标签: javascript ternary-operator eslint


【解决方案1】:

linter 抱怨这个:

return found ? true : false

应该读作“如果found 是真实的,则返回true,否则返回false”。这种结构被称为“三元”运算符,并且从 C 的早期开始就一直在使用,如果不是更早的话。 ? 运算符计算左侧的条件,如果条件计算结果为 true,则返回第一个参数,否则返回第二个参数,其中参数用冒号分隔。

您的代码的问题在于返回条件本身相当于返回布尔文字 truefalse。因此,检查和文字是不必要的,可以删除。但是,因为这是 javascript,您可能希望在返回条件之前双重否定条件,以强制它成为布尔值。因此,结果如下所示:

return !!found

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

当然,这可以更进一步:

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

这样,您甚至根本不需要在代码中引入符号found。此外,使用some() 会更好,但我认为您的问题更多是关于三元运算符而不是如何搜索列表。

【讨论】:

  • 完全正确。我最终完全删除了该功能,只使用了一些。感谢您对三元的解释,这就是我要找的!
【解决方案2】:
return value.some(val => { return val === item; });

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2020-12-15
    • 2018-09-14
    • 2017-07-31
    • 2020-08-19
    • 2012-06-19
    • 2021-07-17
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多