Check for falsy values on array

1.1k views Asked by At

I don't understand why this piece of code works can someone explain to me?

If I delete this piece of the conditional && arr[i] the value of arr[5] don't assume as a falsy value, but if I write that piece of code already assumes arr[5] like a falsy value.

You can see the value of arr[5] on the end of the function.

function bouncer(arr) {
  let word = []
  for (let i = 0; i < arr.length; i++)
    if (typeof arr[i] !== Boolean && arr[i]) {
      word.push(arr[i])
    }
  return word;
}

console.log(bouncer([false, null, 0, NaN, undefined, ""]));

2

There are 2 answers

0
Salwa A. Soliman On BEST ANSWER

Try this code if you want to check for falsy values

Let me tell you that falsy values don't require to be boolean!

For Example, 0 is a falsy value however typeof(0) is number ..

The reason why your code returns an empty array is the if condition, you're checking if typeof(arr[i]) !== Boolean && arr[i]

this condition will always be false since typeof returns a string and Boolean is considered as an Object/ Constructor (which isn't a string)

function bouncer(arr) {
  let word = []
  for (let i = 0; i < arr.length; i++)
    if (arr[i]) {
      word.push(arr[i])
    }
  return word;
}

console.log(bouncer([false, null, 0, NaN, undefined, ""]));
9
Marek Lisiecki On

maybe You can do it simplier :-)

let arr = [false, null, 0, NaN, undefined, "", 111, "aaa"];

let x = arr.filter(i => (typeof i !== Boolean && i))

enter image description here