Munna Babu
Munna Babu

Reputation: 5756

How to remove properties from Object Jasvscript?

i was trying to delete properties which has value empty or null or undefined from object. I am able to delete properties of first level properties. But some scenario property might contain another object and that object might contain another object. So almost like LINKED LIST. But i am not sure how to find second level object property values.

For example

{
  prop1: "value1",
  prop2: { 
       secLevlProp1: "value1",
       secLevlProp2: null,
       secLevlProp3: { 
          secLev2Prop1: "value1",
          secLev2Prop2: "value2",
          secLev2Prop3: { 
                 secLev3Prop1: "value1",
                 secLev3Prop2: "",
                 secLev3Prop3: "value3",
               }
       },
  }
  prop3: [
           { arrProp: "values", arrProp1: "" },
           { arrProp: "values2", arrProp1: "values4" },
  ],
  prop4: "undefined",
  prop5: "value1",
}

from this above object expected output

   {
      prop1: "value1",
      prop2: { 
           secLevlProp1: "value1",
           secLevlProp3: { 
              secLev2Prop1: "value1",
              secLev2Prop2: "value2",
              secLev2Prop3: { 
                     secLev3Prop1: "value1",
                     secLev3Prop3: "value3",
                   }
           },
      }
      prop3: [
               { arrProp: "values" },
               { arrProp: "values2", arrProp1: "values4" },
      ],
      prop5: "value1",
    }

this is what i tried

        Object.keys(myObj).forEach(prop=> {
            if (myObj[prop] === '' || myObj[prop] === null || myObj[prop] === undefined) {
                delete myObj[prop];
            }
        });

this works fine on first level properties but how should i apply the above code on linked list concept on the above format object. Please someone help me on this.

Upvotes: 0

Views: 55

Answers (1)

Hamza El Aoutar
Hamza El Aoutar

Reputation: 5657

You can do it recursively like so :

const deleteProperties = obj => {
    Object.keys(obj).forEach(prop => {
        if (obj[prop] === '' || obj[prop] === null || obj[prop] === undefined) {
            delete obj[prop];
        } else if (typeof obj[prop] === 'object') {
            deleteProperties(obj[prop]);
        }
    });
}

In your example, prop4 won't be removed since it's a string

Upvotes: 1

Related Questions