Reputation: 5756
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
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