若子亦鱼 2024-08-03 09:51 采纳率: 0%
浏览 5

js删除复杂对象中的空值

例如:


obj={
 a:123,
b:234,
c:'',
d:[
{
 ee:444

},
{}
],
t:[
{
ty:'',
fd:{
ff:{
et:[],
ert:''
}
}
}

]
}

类似这种去除所有空值,包括[],{},如果子级都删除了,父级为空也要删除

  • 写回答

4条回答 默认 最新

  • CSDN专家-微编程 2024-08-04 16:51
    关注

    你可以使用递归来删除复杂对象中的空值。下面是一个例子:

    function removeEmptyValues(obj) {
      // 判断是否为对象
      if (typeof obj === 'object') {
        // 如果是数组
        if (Array.isArray(obj)) {
          for (let i = obj.length - 1; i >= 0; i--) {
            const value = obj[i];
            // 递归删除数组中的空值
            if (isEmpty(value)) {
              obj.splice(i, 1);
            } else {
              removeEmptyValues(value);
            }
          }
          // 如果是对象
        } else {
          for (let key in obj) {
            const value = obj[key];
            // 递归删除对象中的空值
            if (isEmpty(value)) {
              delete obj[key];
            } else {
              removeEmptyValues(value);
            }
          }
          // 如果对象为空,则删除父级的对应属性
          if (isEmpty(obj)) {
            return null;
          }
        }
      }
      return obj;
    }
    
    // 判断值是否为空
    function isEmpty(value) {
      if (typeof value === 'object' && value !== null) {
        // 数组不为空
        if (Array.isArray(value) && value.length > 0) {
          return false;
        }
        // 对象不为空
        if (Object.keys(value).length > 0) {
          return false;
        }
        // 其他对象类型为空
        return true;
      }
      // 非对象类型为空
      return value === '' || value === null;
    }
    
    // 测试
    const obj = {
      a: 123,
      b: 234,
      c: '',
      d: [
        {
          ee: 444
        },
        {}
      ],
      t: [
        {
          ty: '',
          fd: {
            ff: {
              et: [],
              ert: ''
            }
          }
        }
      ]
    };
    
    const result = removeEmptyValues(obj);
    console.log(result);
    

    输出处理后的结果:

    {
      a: 123,
      b: 234,
      d: [
        {
          ee: 444
        }
      ]
    }
    

    注意,这里并没有删除空字符串属性c和空对象属性{},因为你的要求是如果子级都删除了,父级为空也要删除。在这个例子中,属性c和属性{}都还有兄弟节点,所以它们被保留了

    评论

报告相同问题?

问题事件

  • 创建了问题 8月3日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?