Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing undefined values from Array

In certain situations, it may happen that we have undefined or generally falsy values in Array structures. For instance when reading and filling data from some unknown sources like Databases or HTML structures. Like

var data = [42, 21, undefined, 50, 40, undefined, 9] 

Since that might cause trouble when looping over such arrays and working on the elements, what is the best practice to remove undefined (falsy values) ?

like image 517
jAndy Avatar asked Feb 19 '15 13:02

jAndy


People also ask

How do you remove an undefined value from an array?

To remove all undefined values from an array:Use the Array. filter() method to iterate over the array. Check if each value is not equal to undefined and return the result. The filter() method will return a new array that doesn't contain any undefined values.

How do you remove null values from an array?

To remove a null from an array, you should use lodash's filter function. It takes two arguments: collection : the object or array to iterate over. predicate : the function invoked per iteration.

How do you remove values from an array?

Find the index of the array element you want to remove using indexOf , and then remove that index with splice . The splice() method changes the contents of an array by removing existing elements and/or adding new elements. The second parameter of splice is the number of elements to remove.

How do you remove undefined values from an object?

To remove all undefined values from an object:Use the Object. keys() method to get an array of the object's keys. Use the forEach() method to iterate over the array and delete all undefined values using the delete operator.


2 Answers

To use Array.prototype.filter here might be obvious. So to remove only undefined values we could call

var data = [42, 21, undefined, 50, 40, undefined, 9];  data = data.filter(function( element ) {    return element !== undefined; }); 

If we want to filter out all the falsy values (such as 0 or null) we can use return !!element; instead.

But we can do it slighty more elegant, by just passing the Boolean constructor function, respectively the Number constructor function to .filter:

data = data.filter( Number ); 

That would do the job in this instance, to generally remove any falsy value, we would call

data = data.filter( Boolean ); 

Since the Boolean() constructor returns true on truthy values and false on any falsy value, this is a very neat option.

like image 77
jAndy Avatar answered Sep 24 '22 22:09

jAndy


Inline using lambda

result.filter(item => item); 
like image 27
raphaklaus Avatar answered Sep 23 '22 22:09

raphaklaus