Javascript 删除具有未定义值的属性后删除空对象
我有一个目标:Javascript 删除具有未定义值的属性后删除空对象,javascript,Javascript,我有一个目标: { a: undefined, b: 'B', c: { d: undefined } } 我想删除所有未定义值的属性,如果对象为空,则删除父属性 function removeEmpty (object) { Object.keys(object).forEach((key) => { if (object[key] && typeof object[key] === 'objec
{
a: undefined,
b: 'B',
c: { d: undefined }
}
我想删除所有未定义值的属性,如果对象为空,则删除父属性
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;
}
我理解这不起作用,因为当object[key]指向“c”proerty时,这个不是空的。只需检查清理后是否可以移除该对象(实际上,这正是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}
函数removempty(对象){
Object.keys(对象).forEach((键)=>{
if(对象[键]&&typeof对象[键]==“对象”){
removempty(对象[键]);
如果(Object.keys(Object[key]).length==0)//undefined在JSON中是无效的,那么一个小技巧就是对对象进行字符串化并将其解析回来。例如,JSON.parse(JSON.stringify(obj))
@Keith,施华洛世奇先生说的不是objecstjsons@assembler我知道..阅读我的完整响应…只需添加if(Object.keys(Object[key]).length==0){delete object[key];}
调用removempty(object[key]);
?谢谢大家。@FelixKling的答案很好!{removeMe:undefined,test:1}
={
这就是您的期望吗?@Keith说得好。我将OP的代码复制到了的工作中,并且只解决了一个特定问题。我相信更新后的代码工作得更好。感谢您对细节的关注!使用新版本,您将删除评估为false
的有效属性,例如false
本身,或者0
。使用原始版本(具有!object[key].length
条件)作者正在删除空数组(也有效)@Andrea我的回答应该是针对OPs最初的问题,而不是确保所有可能输入的代码的完整性和正确性。我甚至没有一组单元测试来声明API契约以安全开始,我同意你的看法。事实上,它不是针对,我想删除所有未定义req的属性uest,因为它不仅删除了未定义的
值,而且还删除了假
评估值。现在它删除了。
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;
}