如何删除JSON中regions字段为空数组的子对象?
解决方案
问题定位
你的原始代码存在两处明显错误:
- 判断条件不匹配需求:你当前校验的是
damage_type字段的长度,而实际需要判断regions数组是否为空 - 遍历方式存在隐患:使用数字索引遍历对象属性,删除属性后会出现索引错位,导致漏删或报错
修改后代码
jsonfile.readFile(theJsonFile, function (err, obj) { if (err) return console.error(err) // 一次性获取所有键后遍历,不受删除操作影响 Object.keys(obj).forEach(key => { // 校验regions是否为空数组 if (obj[key].regions.length === 0) { delete obj[key] } }) // 如果需要将处理后的结果写回文件,可添加以下代码 // jsonfile.writeFile(theJsonFile, obj, err => err && console.error(err)) })
逻辑说明
- 先通过
Object.keys()拿到目标对象所有顶层键的完整集合,遍历过程不会因为后续删除属性发生变化 - 直接读取每个子对象的
regions数组长度,长度为0就删除对应的顶层键,完全匹配你的需求
内容的提问来源于stack exchange,提问作者hisam
相关产品推荐
相关产品推荐

