Javascript 如何从对象和数组元素中删除未定义的属性
我有一个目标:Javascript 如何从对象和数组元素中删除未定义的属性,javascript,Javascript,我有一个目标: { a: { b: { c: undefined } }, b: { c: 15, d: [] }, c: { d: [11, undefined ,12], e: {} } } 我需要得到这个: { b: { c: 15 }, c: { d: [11, 12] } } 我找到了这个函数(来源:) 但它只是删除数组的元素,结果如下 { b: { c: 15 }, c:
{
a: {
b: {
c: undefined
}
},
b: {
c: 15,
d: []
},
c: {
d: [11, undefined ,12],
e: {}
}
}
我需要得到这个:
{
b: {
c: 15
},
c: {
d: [11, 12]
}
}
我找到了这个函数(来源:)
但它只是删除数组的元素,结果如下
{
b: {
c: 15
},
c: {
d: [11, empty ,12]
}
}
你需要一个递归的解决方案。创建一个函数,如果其值为false,或者如果其所有递归元素为false或空数组,或者没有键,则该函数接受值并返回false:
const removeecursive=(obj)=>{
//Falsey原语,包括null:
如果(!obj)返回;
//Truthy基元(或函数):
如果(对象类型!=='object')返回对象;
//数组,转换所有值并返回新数组
//如果存在任何truthy转换值:
if(数组isArray(obj)){
const newArr=obj.map(removeRecursive).filter(布尔);
返回newArr.length?newArr:未定义;
}
//否则,它就是一个对象:
const newObj=Object.fromEntries(
Object.entries(obj)
.map(([key,val])=>([key,removeCursive(val)])
.filter(([,val])=>val)
);
if(Object.keys(newObj.length){
返回newObj;
}
};
常量对象={
a:{
b:{
c:未定义
}
},
b:{
c:15,
d:[]
},
c:{
d:[11,未定义,12],
e:{}
}
};
console.log(removeecursive(obj))代码>所以您只需要?不幸的是,如果存在任何假值,它会删除所有内容:0,,,null..如果您想保留未定义的假值,那么请检查未定义的
,而不是truthy测试。
{
b: {
c: 15
},
c: {
d: [11, empty ,12]
}
}