0

This code is ok

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

console.log(bouncer([7, "ate", "", false, 9]));
console.log(bouncer([false, null, 0, NaN, undefined, ""]));
console.log(bouncer([null, NaN, 1, 2, undefined]));

Output:

[ 7, 'ate', 9 ]
[]
[ 1, 2 ]

But if this is

(arr[i]) filteredArr.push(arr[i])

replaced by it

if (arr[i] != false && arr[i] != null && arr[i] != NaN && arr[i] != "" && arr[i] != 0 && arr[i] != undefined) filteredArr.push(arr[i]);

i have this in output:

[ 7, 'ate', 9 ]
[ NaN ]
[ NaN, 1, 2 ]

I try to understand how this is work, but i can't.

p.s. sorry for my bad english.

  • [This](https://stackoverflow.com/questions/22600248/is-nan-falsy-why-nan-false-returns-false) might answer your question. – c0m1t Dec 14 '22 at 20:36
  • `arr.filter(item => item)` should do it – CollinD Dec 14 '22 at 20:36
  • Why not simply [`return arr.filter(Boolean);`](/a/32906951/4642212)? – Sebastian Simon Dec 14 '22 at 20:37
  • NaN is not equal to NaN in javascript, so saying arr[i] != NaN is true – markfila Dec 14 '22 at 20:37
  • `const bouncer1 = arr => arr.filter(item => item)` and it is !isNaN(item) insted of item !== NaN: `const bouncer2 = arr => arr.filter(item => item !== false && item !== null && !isNaN(item) && item !== "" && item !== 0 && item !== undefined)` – mplungjan Dec 14 '22 at 20:39

0 Answers0