如何更新此递归函数以检查对象的属性名称?



我在网上发现了以下代码截图,如果值为 null、未定义或 0,它会非常准确且递归地从对象中删除属性

const removeEmpty = (obj) => {
Object.keys(obj).forEach(key =>
(obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) ||
(obj[key] === undefined || obj[key] === null || obj[key] === 0) && delete obj[key]
);
return obj;
};

我正在尝试修改它,以便它也检查"index"值的属性名称。如果匹配,则不要删除该属性,即使其值为 0

例如,如果处理以下对象

"page": {
"index": 0,
"title": "test",
"credits": undefined 
}

期望的结果将是

"page": {
"index": 0,
"title": "test"
}

当前实际结果为

"page": {
"title": "test", 
}

您可以定义一些受保护的密钥并将其从删除过程中排除:

const protectedKeys = ['index'];
const removeEmpty = (obj) => {
Object.keys(obj)
.forEach(key =>
(obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) ||
(obj[key] === undefined || obj[key] === null || obj[key] === 0)
&& protectedKeys.includes(key) === false
&& delete obj[key]
);

return obj;
};
const data = {
"page": {
"index": 0,
"title": "test",
"credits": undefined 
}
};
console.log(removeEmpty(data));

最新更新