If an inner element is empty you need to delete the upper most element.
You don't know which keys to remove unless an inner element has an empty value.
function removeEmptyElements(obj) {
var i,k,k2,L,outerElmtValue,thirdLevelObj,thirdLvlVal;
for (k in obj) {
outerElmtValue = obj[k];
if (!outerElmtValue) {//There is no truthy value in this element
delete obj[k];//Delete the outer element
continue;
}
if (Array.isArray(outerElmtValue)) {
L = outerElmtValue.length;
for (i=0;i<L;i++) {
thirdLevelObj = outerElmtValue[i];
for (k2 in thirdLevelObj) {
thirdLvlVal = thirdLevelObj[k2];
Logger.log('thirdLvlVal: ' + thirdLvlVal)
if (!thirdLvlVal) {
delete obj[k];//Delete the parent
}
}
}
}
}
return obj;
}
function runTest() {
var testObj =
{
"top": [{
"language": "English",
"value": ""
}, {
"language": "German",
"value": "hASTA"
}],
"bottom": [{
"language": "English",
"value": "jfgfjg"
}, {
"language": "German",
"value": "fkjhf"
}],
"In": "12 am",
"Out": "3 am",
"Type": ""
};
var finalObj = removeEmptyElements(testObj);
Logger.log(JSON.stringify(finalObj))
}