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