I have a following object:
{
  a: {
    b: {
      c: undefined
    }
  },
  b: {
    c: 15,
    d: []
  },
  c: {
    d: [11, undefined ,12],
    e: {}
  }
}
And i need to get this:
{
 b: {
  c: 15
 },
 c: {
  d: [11, 12]
 }
}
I found this function (source: Remove undefined properties from object )
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;
}
But it just delete elements of array and it turns out the following
{
 b: {
  c: 15
 },
 c: {
  d: [11, empty ,12]
 }
}
 
    