我有一个对象:
{
a: undefined,
b: 'B',
c: { d: undefined }
}
我想删除所有未定义值的属性,如果object为空,则删除父属性。
function removeEmpty (object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
}
else if (object[key] == null || !object[key].length) delete object[key]
});
return object;
}
我知道这不起作用,因为当指向对象[键]时,' c'保护,这个不是空的。
答案 0 :(得分:3)
检查清洁后是否可以移除物体(实际上,这正是Felix Kling提出的)。该版本还解决了Keith指出的问题:
function removeEmpty(object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
if (Object.keys(object[key]).length === 0) // <---- Check whether there
delete object[key]; // <---- no objects in current one
}
else if (object[key] == null || (typeof object[key] === 'object' && object[key].length === 0)) {
delete object[key];
}
});
return object;
}
removeEmpty({
a: undefined,
b: 'B',
c: { d: undefined },
test: 1,
test2: 0,
test3: []
})
// Produces {b: "B", test: 1, test2: 0}
以前的版本:
function removeEmpty(object) {
Object.keys(object).forEach((key) => {
if (object[key] && typeof object[key] === 'object') {
removeEmpty(object[key]);
if (Object.keys(object[key]).length === 0) // <---- Check whether there
delete object[key]; // <---- no objects in current one
}
else if (object[key] == null || !object[key].length) delete object[key]
});
return object;
}