Filter Object in Javascript

In Javascript, There are many ways to filter the Object.

  1. Using reduce & Object.keys
  2. Using reduce, Object.keys & Object.assign
  3. Using map & spread syntax instead of reduce
  4. Using Object.entries & Object.fromEntries
  5. Using lodash.js

Using reduce & Object.keys

Object.filter = (obj, predicate) => 
Object.keys(obj)
.filter( key => predicate(obj[key]) )
.reduce( (res, key) => (res[key] = obj[key], res), {} );

// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);

Using reduce, Object.keys & Object.assign

Object.filter = (obj, predicate) => 
Object.keys(obj)
.filter( key => predicate(obj[key]) )
.reduce( (res, key) => Object.assign(res, { [key]: obj[key] }), {} );

// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);

Using map & spread syntax instead of reduce

Object.filter = (obj, predicate) => 
Object.assign(...Object.keys(obj)
.filter( key => predicate(obj[key]) )
.map( key => ({ [key]: obj[key] }) ) );

// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};
var filtered = Object.filter(scores, score => score > 1);
console.log(filtered);

Using Object.entries & Object.fromEntries

Object.filter = (obj, predicate) => 
Object.fromEntries(Object.entries(obj).filter(predicate));

// Example use:
var scores = {
John: 2, Sarah: 3, Janet: 1
};

var filtered = Object.filter(scores, ([name, score]) => score > 1);

Using Lodash.js

_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');

--

--