javascript - 从包含嵌套对象和数组的对象中删除空字符串字段?

标签 javascript

我问了另一个问题,但有人关闭了这个问题。我真的很需要这个答案。这就是为什么我问另一个问题。
我有一个像下面这样的对象。我必须从嵌套对象和嵌套数组中删除该空字符串。我怎样才能删除它。

const obj = {
  name: 'Red Boy',
  price: '350',
  originalPrice: '', // Empty string field
  stock: 20,
  category: {
    name: '', // Empty String field
    subCategory: { name: ''} // Empty String filed 
  },
  weight: '90kg',
  dimensions: {
    width: '50cm',
    height: '', // Empty string filed
    length: '70cm'
  },
  suitable: [
     { name: 'Yoga' },
     { name: '' }, // Empty String filed
     { name: 'Winter' }
  ],
  additionalInfo: [
     { field: 'closure', value: 'Button' },
     { field: 'collar', value: ''} // Empty String Field 
  ]
}
在这种混合对象类型中,您可以看到一些子对象和一些子数组。您还可以看到一些不包含任何值的字段。(我注释掉该字段)。
实际上我需要删除该文件。如何从上述混合对象类型中删除该空字符串字段。
谢谢..
我的预期结果-
{
  name: 'Red Boy',
  price: '350',
  // Removed
  stock: 20,
  category: {
    name: '', // Empty String field
    // Removed
  },
  weight: '90kg',
  dimensions: {
    width: '50cm',
    // Removed
    length: '70cm'
  },
  suitable: [
     { name: 'Yoga' },
     //Removed
     { name: 'Winter' }
  ],
  additionalInfo: [
     { field: 'closure', value: 'Button' },
     { field: 'collar', //Removed }
     // Here If this two filed is empty then should remove the whole object
     { field: '', value: '' }
     // Then should remove whole '{ field: '', value: '' }'
  ]
}

最佳答案

为此,我们需要实现一个递归函数来删除所有嵌套数组和对象中的所有空字符串。

function rec(obj){
    for(let key of Object.keys(obj)){
        if (obj[key] === ''){
            delete obj[key];
        }
        else if (typeof obj[key] === 'object'){
            obj[key] = rec(obj[key]);
            if (Object.keys(obj[key]).length === 0 ) delete obj[key];
        }
    }
    return Array.isArray(obj) ? obj.filter(val => val) : obj;
}

另外,请注意它不是纯混合的。因为 Array 是 Object 的特殊类型。

关于javascript - 从包含嵌套对象和数组的对象中删除空字符串字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70232264/

相关文章:

javascript - 如何从 AJAX 提交的表单中获取响应?

javascript - Express 生成器 - TypeError : app. set 不是一个函数

javascript - XMLHttpRequest() 为具有绝对或相对路径的本地主机发送 NS_ERROR_FAILURE

javascript - 在多个 <script> 标签之间分配代码

javascript - Angular 范围共享范围从表格行到模态

javascript - 为什么这不能阻止默认链接?

javascript - 使用 MomentJS 将时区特定时间转换为 UTC

javascript - JavaScript 中 var num=30 和 var num=new Number(30) 有什么区别?

javascript - For循环和吊装

javascript - 如何在不输入表单的情况下显示消息