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]
 }
}