Skip to content

How to filter object based on conditional argument?

I am calling a function with two arguments,

Arg 1: Object {a:1, b:2, c:3, d:4}

Arg 2: Condition ((prop, key) => prop >= 3))

Here based on the condition we need to filter the object and provide the result as array of objects.

The code that I have tried,

const pickBy = (a, b) => {
  const data = Object.values(a).filter(b);
  console.log(data)
}

pickBy({a:1, b:2, c:3, d:4}, ((prop, key) => prop >= 3))

Current Result: [3,4]

Expected Result: [{c:3}, {d:4}]

Answer

You could get the entries, filter by handing over the right format for filtering function and build objects of filtered entries.

const
    pickBy = (object, filterFn) => Object
        .entries(object)
        .filter(([k, v]) => filterFn(v, k))
        .map(([k, v]) => ({ [k]: v }));

console.log(pickBy({ a: 1, b: 2, c: 3, d: 4 }, (prop, key) => prop >= 3));