jeremy jeremy - 1 year ago 91
Javascript Question

Filter object of object with RxJS

I have the following stream and I would like to filter and keep only the params that are true(boolean).

"colors": {
"red": "",
"yellow": true,
"green": false
"size": {
"t5": true,
"t10": "",
"t20": true

I need the output to look like this:

"colors": ["yellow"],
"size": ["t5,t20"]

Here are my thougt when I try to deal with this:

  • I tried to use map but without success. I guess it's because it's an
    object and not an array.

  • All keys and values are dynamic in this object so I can't use them to
    manipulate the object.

  • flatMap() help me a bit but I don't know what to do with it as I
    don't know the name of the keys.

.flatMap(x => Object.values(x))

Answer Source

This is not an rxjs issue, just a plain js mapping:

getTruthyKeys(obj: any): Array<string> {
   return Object.keys(obj).filter(key => obj[key] === true);

mainKeysToTruthyLists(obj: any): Array<{key: string, truthy: Array<string>}> {
  let result = {};
  Object.keys(obj).forEach(key => result[key] = getTruthyKeys(obj[key]);
  return result;

and now you can apply it as a map on your stream:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download