Is there some elegant way of filtering out falsey properties from this object with lodash/underscore? Similar to how _.compact(array)
removes falsey elements from arrays
so from
{ propA: true, propB: true, propC: false, propD: true, }
returning
{ propA: true, propB: true, propD: true, }
One can use filter() function in JavaScript to filter the object array based on attributes. The filter() function will return a new array containing all the array elements that pass the given condition. If no elements pass the condition it returns an empty array.
JavaScript's Objects are not iterable like arrays or strings, so we can't make use of the filter() method directly on an Object .
JavaScript objects don't have a filter() method, you must first turn the object into an array to use array's filter() method. You can use the Object. keys() function to convert the object's keys into an array, and accumulate the filtered keys into a new object using the reduce() function as shown below.
Lodash 4.0 has _.pick
, which takes an array of properties, and _.pickBy
which takes a function as an argument and returns an object only containing the keys for which that function returns truthy which is what we want here, so it'd be:
filtered = _.pickBy(obj, function(value, key) {return value;})
Or, since _.pickBy
defaults to using _.identity
as it's second argument, (and that's essentially what we've written above,) it can just be written as:
filtered = _.pickBy(obj);
In underscore and old versions of lodash, there's just a single _.pick
, which has both behaviors of _.pick
and _.pickWith
from v4. So you can do:
filtered = _.pick(obj, function(value, key) {return value;})
Or more succinctly:
filtered = _.pick(obj, _.identity)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With