问题描述
这是我的对象。我正在尝试删除空数组,空字符串,空值,未定义。
let result = {
a : [],b: undefined,c: null,d: NaN,e: {},f:{test: undefined,tes1: null,tes2:NaN},g:{name :{x:undefined,y:"s",z: null}},x:"sujon",y:"",}
const removeEmpty = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key]);
else if (obj[key] === undefined) delete obj[key];
});
return obj;
};
let res = removeEmpty(result)
console.log(res)
我的预期结果将是这样:
let result = {
g:{name :{y:"s"}},}
我如何获得预期的结果?
解决方法
在递归调用之后,如果结果是一个空对象(没有自己的属性),请将其删除:
let result = {
a : [],b: undefined,c: null,d: NaN,e: {},f:{test: undefined,tes1: null,tes2:NaN},g:{name :{x:undefined,y:"s",z: null}},x:"sujon",y:"",z:0,}
const removeEmpty = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key]);
if (
(!obj[key] && obj[key] !== 0) ||
(typeof obj[key] === 'object' && Object.keys(obj[key]).length === 0)
) {
delete obj[key];
}
});
return obj;
};
let res = removeEmpty(result)
console.log(res)