0

I would like to recursively clean any fields which are undefined, or have an empty object as parent like this following:

Example:

{
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    f: undefined,
  },
  "g": {
     "h": 'I',
     "j": undefined,
  },
  "k": "L",
  "m": {
     "n": {
       "o": {
         "z": undefined,
       }
     },
    "p": 'toto'
   }
}

I am expecting the following result :

{
  "g": {
    "h": 'I',
  },
  "k": 'L',
  "m": {
    "p": 'toto'
  }
}

Thank you for your help

Joelito
  • 95
  • 3
  • 7
  • Possible duplicate of [remove blank attributes from an object in javascript](https://stackoverflow.com/questions/286141/remove-blank-attributes-from-an-object-in-javascript) – ASDFGerte Jul 06 '17 at 16:01

2 Answers2

1

function filter(obj) {
  for (var key in obj) {
    if (obj[key] === undefined) {
      delete obj[key];
      continue;
    }
    if (obj[key] && typeof obj[key] === "object") {
      filter(obj[key]);
      if (!Object.keys(obj[key]).length) {
        delete obj[key];
      }
    }
  }
  return obj;
}

var data = {
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    "f": undefined,
  },
  "g": {
    "h": 'I',
    "j": undefined,
  },
  "k": "L",
  "m": {
    "n": {
      "o": {
        "z": undefined,
      }
    },
    "p": 'toto'
  }
};

console.log(filter(data));

Simply delete these keys and iterate recursively.

mhodges
  • 10,938
  • 2
  • 28
  • 46
Jonas Wilms
  • 132,000
  • 20
  • 149
  • 151
1

function cleanArray(actual) {
  var newArray = new Object();
 newArray=JSON.parse(JSON.stringify(actual));
  return newArray;
}
var obj={
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    f: undefined,
  },
  "g": {
     "h": 'I',
     "j": undefined,
  },
  "k": "L",
  "m": {
     "n": {
       "o": {
         "z": undefined,
       }
     },
    "p": 'toto'
   }
};
console.log(cleanArray(obj));
Osama
  • 2,912
  • 1
  • 12
  • 15