如何移除包含嵌套对象与数组的对象中值为空字符串的字段
JavaScript 嵌套对象空字符串字段清理实现
以下代码完全匹配你提出的清理规则,支持多层嵌套对象、嵌套数组的递归处理:
function cleanEmptyFields(input) { // 处理数组类型 if (Array.isArray(input)) { return input .map(item => cleanEmptyFields(item)) // 过滤掉处理后为空对象的数组元素 .filter(item => !(typeof item === 'object' && item !== null && Object.keys(item).length === 0)) } // 处理普通对象类型 if (typeof input === 'object' && input !== null) { const cleanedObj = {} for (const [key, value] of Object.entries(input)) { // 值为空字符串直接跳过不保留 if (value === '') continue // 递归处理嵌套的对象/数组 const processedVal = cleanEmptyFields(value) // 处理后得到空对象也跳过不保留 if (typeof processedVal === 'object' && processedVal !== null && Object.keys(processedVal).length === 0) { continue } cleanedObj[key] = processedVal } return cleanedObj } // 数字、布尔值等非对象/数组的基础类型直接返回 return input }
调用示例
使用你提供的原对象调用函数即可得到符合预期的结果:
const result = cleanEmptyFields(obj) console.log(result)
输出结果
{ name: 'Red Boy', price: '350', stock: 20, category: { name: '' }, weight: '90kg', dimensions: { width: '50cm', length: '70cm' }, suitable: [ { name: 'Yoga' }, { name: 'Winter' } ], additionalInfo: [ { field: 'closure', value: 'Button' }, { field: 'collar' } ] }
说明:若数组中存在{ field: '', value: '' }这类全空字符串的对象元素,处理后会变成空对象,会被直接从数组中过滤移除,完全符合你提出的规则要求。
内容的提问来源于stack exchange,提问作者user17578307
相关产品推荐
相关产品推荐

