我在网上发现了以下代码截图,如果值为 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));