javascript - 如何从对象中深度删除空值、空对象和空数组
问题描述
我有一个看起来像这样的对象:
var myObject = { a: { b: [{}], c: [{}, {d: 2}], e: 2, f: {} }, g:{}, h:[], i: [null, 2] }
我想删除空值和空对象(数组和对象),使其看起来像:
{ a: {c: [ {d: 2} ], e: 2 }, i: [ 2 ] }
该函数应删除空值、空对象和空数组。有什么优雅的方法吗?
解决方案
这是一个递归清理对象的函数。它将深入遍历所有属性并删除空值、空数组和空对象:
cleanUpObject(jsonObject: object): object {
Object.keys(jsonObject).forEach(function (key, index) {
const currentObj = jsonObject[key]
if (_.isNull(currentObj)) {
delete jsonObject[key]
} else if (_.isObject(currentObj)) {
if (_.isArray(currentObj)) {
if (!currentObj.length) {
delete jsonObject[key]
} else {
const cleanupArrayObj = []
for (const obj of currentObj) {
if (!_.isNull(obj)) {
const cleanObj = this.cleanUpJson(obj)
if (!_.isEmpty(cleanObj)) {
cleanupArrayObj.push(cleanObj)
}
}
}
if (!cleanupArrayObj.length) {
delete jsonObject[key]
} else {
jsonObject[key] = cleanupArrayObj
}
}
} else {
if (_.isEmpty(Object.keys(jsonObject[key]))) {
delete jsonObject[key]
} else {
jsonObject[key] = this.cleanUpJson(currentObj)
if (_.isEmpty(Object.keys(jsonObject[key]))) {
delete jsonObject[key]
}
}
}
}
}, this)
return jsonObject
}
推荐阅读
- python-3.x - 使用 Tkinter 在 Python 中未使用和未定义的变量,如何解决?
- android - 数据绑定膨胀非常缓慢
- visual-studio-code - 远程安装的扩展失败
- python - 点到点列表之间的距离
- mysql - Cakephp 3 在选择复杂查询中选择
- autocomplete - google.maps.places.Autocomplete - 生成的 SKU 是什么
- r - 为什么使用 R 中的 fPortfolio 库的 4 只股票的切线投资组合没有给出卖空比率
- excel - 将行中的数据与子数据对齐
- python - 传递的子图引用在直接引用和列表中的行为不同
- javascript - JavaScript - eval 中的嵌套函数不适用于 try/catch 块