And*_*ton 3 javascript ternary-operator eslint
我有一个检查在数组中是否找到值的函数。我想返回一个真或假。当前代码可以正常工作,但会引发js-standerd / es-lint错误“在条件表达式中不必要地使用布尔文字”我在这里搜索了很多错误消息,但似乎无法解决。对我来说,这是“如果找到该值,则返回true,否则返回false”
let found = value.find(val => {
return val === item
})
return found ? true : false
Run Code Online (Sandbox Code Playgroud)
我试过了
return value.find(val => {
return val === item
}) || false
Run Code Online (Sandbox Code Playgroud)
哪个可行,但如果找到则不返回布尔值,它返回item。
我知道我可以通过多种方式进行这项工作,但我只是想弄清楚我的代码是错误的还是不正确的,或者es-lint是否将其标记为错误的。
短绒棉抱怨这:
return found ? true : false
Run Code Online (Sandbox Code Playgroud)
它说,如果found是真实返回,true否则返回false。这种结构被称为“三元”运算符,并且从C的早期开始就一直在使用,如果没有的话。该?运营商evalautes左边的条件,如果条件评估为真返回第一个参数,否则返回FALSE。
您的代码的问题在于,返回条件本身等同于返回布尔文字true或false。因此,检查和文字是不必要的,可以删除。但是,由于这是JavaScript,因此您可能需要在返回条件之前对条件进行两次否定,以使其为布尔值。因此,结果如下所示:
return !!found
Run Code Online (Sandbox Code Playgroud)
这更易于阅读,并且将来被错误或误解的可能性也较小。
当然,这可以进一步:
return !!value.find(val => {
return val === item
})
Run Code Online (Sandbox Code Playgroud)
这样,您甚至根本不需要found在代码中引入符号。同样,使用some()会更好,但是我认为您的问题更多是关于三元运算符,而不是如何搜索列表。
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |