DEV Community

Cover image for 1 line of code: How to clean an Array

1 line of code: How to clean an Array

Martin Krause on November 16, 2021

const clean = arr.filter(item => !!item || item === 0 || item === false); Enter fullscreen mode Exit fullscreen mode ...
Collapse
 
lexlohr profile image
Alex Lohr • Edited

Interesting is that all these filtered can be coerced to false, and only the number 0 and false can, too. That would simplify the filter to:

arr.filter(item => !!item || item === 0 || item === false);
Enter fullscreen mode Exit fullscreen mode

EDIT: The original article did something like:

arr.filter(item => typeof item === 'number' && !isNaN(item) || typeof item === 'boolean' || !!item);
Enter fullscreen mode Exit fullscreen mode

Now that it is updated, the above doesn't seem to make sense, obviously.

Collapse
 
martinkr profile image
Martin Krause

Hi,

thank you for the simplification! I updated the article and the code.

Cheers!

Collapse
 
jamesthomson profile image
James Thomson

Next time I suggest posting an edit rather than overwriting the old article. The comment above makes no sense given the new article context.

Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

Why not just this?

arr.filter(i=>i)
Enter fullscreen mode Exit fullscreen mode
Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

Ah, I misread - you want to keep 0 and false. In which case, you can shorten to:

arr.filter(item => item || item === 0 || item === false)
Enter fullscreen mode Exit fullscreen mode

The !! is unnecessary.

Collapse
 
lexlohr profile image
Alex Lohr

Because it was explicitly stated that false and 0 should not be filtered. Your code would filter them.

Collapse
 
pengeszikra profile image
Peter Vivo

Why we would like "" from string list? "" and 0 is give false result but each means something.

[[], {}, null, undefined, "", 0, NaN, -0, Infinity]
  .filter(item => (item ?? null) !== null)
Enter fullscreen mode Exit fullscreen mode
Collapse
 
martinkr profile image
Martin Krause

Hi Peter,

I can not exactly follow you train of thought. Would you mind to elaborate a bit?

Thank you !

Collapse
 
grendel profile image
grendel

Empty string is something, not nothing. This kind of thinking is paramount in, for example, shell scripting/programming, where whether a string is null or simply doesn't exist changes everything about the command

Collapse
 
damjand profile image
Damjan Dimitrov

Can be achieved with a very short statement: arr.filter(Boolean).

The comment by @lexlohr should also be regarded if we don't want to filter out values such as 0 or false.

Collapse
 
jonrandy profile image
Jon Randy 🎖️

Shorter than arr.filter(Boolean) is arr.filter(i=>i)

Collapse
 
martinkr profile image
Martin Krause

Hi Damjan,

thank you for the suggestion. Indeed, this function should preserve 0 and false. Array.filter(Boolean) will be another oneliner which removes everything that is considered "false".
Cheers!