Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unnecessary use of Boolean literals in conditional expression

I have a function that checks whether a value is found in array. I want to return a true or false. Current code works but throws and js-standerd/es-lint error "Unnecessary use of boolean literals in conditional expression" I've searched through a ton of these error messages here but can't seem to wrap my head around it. To me this says 'If the value is found return true otherwise false'

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

I tried this

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

Which works but doesn't return a Boolean if found, it returns item.

I know i can make this work in multiple ways but i'm just trying to figure out whether my code is bad or incorrect or whether es-lint is flagging it sort of incorrectly.

like image 638
Andrew MacNaughton Avatar asked Apr 22 '18 22:04

Andrew MacNaughton


1 Answers

The linter is complaining about this:

return found ? true : false

Which should be read as "If found is truthy return true otherwise return false". This structure is referred to as a 'ternary' operator and has been in use since the early days of C, if not before. The ? operator evaluates the condition on the left and returns the first argument if the condition evaluates to true, otherwise it returns the second argument, where the arguments are separated by a colon.

The problem with your code is that returning the condition itself is the equivalent of returning the boolean literals true or false. Therefore, the check and the literals are unnecessary and can be removed. Though, because this is javascript you might want to double negate the condition before returning it, to force it to be a boolean. So, the result looks like this:

return !!found

This is easier to read and there is less chance of it being implemented wrong or misunderstood in the future.

Of course, this could be taken further:

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

In this way, you don't need to even introduce the symbol found into the code at all. Also, this would be better with some(), but I think your question is more about the ternary operator than how to search a list.

like image 146
Software Engineer Avatar answered Nov 17 '22 03:11

Software Engineer