Не уверен, где вы взяли свой фрагмент кода, но, похоже, он никак не изменяет объект.Ниже должно работать, прокомментировано, чтобы помочь вам понять это.Поскольку объекты передаются по ссылке, мы можем использовать любое свойство, которое является объектом для обработки вложенных случаев.
const myObj = {
a: 1,
b:'foo',
c: '',
d: null,
e: undefined,
f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
};
const removeEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(obj[k] === null){
delete obj[k];//special case for null since typeof null returns "object" :-(
}else if(typeof obj[k] === 'object'){//if the property IS an object
removeEmpty(obj[k]);//recurse
}else if(! obj[k]){//if property is falsey (undefined, "", 0)
delete obj[k];//remove it from the object
}
});
return obj;
};
console.log(removeEmpty(myObj));
РЕДАКТИРОВАТЬ
если вы хотите получить объект, который содержит только пустые значения, вы можете изменить код как таковой:
const myObj = {
a: 1,
b:'foo',
c: '',
d: null,
e: undefined,
f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
};
const removeNotEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(typeof obj[k] === 'object' && obj[k] !== null){//if the property IS an object
removeNotEmpty(obj[k]);//recurse
}else if(obj[k]){//if property is truthy
delete obj[k];//remove it from the object
}
});
return obj;
};
console.log(removeNotEmpty(Object.assign({},myObj)));//make sure to copy the object if you don't want to modify the first (that's what the Object.assign is for)