Comment supprimer profondément les valeurs nulles, les objets vides et le tableau vide d'un objet


JLavoie

J'ai un objet qui ressemble à ceci:

var myObject = { a: { b: [{}], c: [{}, {d: 2}], e: 2, f: {} }, g:{}, h:[], i: [null, 2] }

Je veux supprimer les valeurs nulles et les objets vides (tableau et objets) pour qu'il ressemble à:

{ a: {c: [ {d: 2} ], e: 2 }, i: [ 2 ] }

La fonction doit supprimer les valeurs nulles, les objets vides et les tableaux vides. Une manière élégante de le faire?

JLavoie

Voici une fonction qui nettoie l'objet de manière récursive. Il bouclera profondément toutes les propriétés et supprimera les valeurs nulles, les tableaux nuls et les objets nuls:

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
}

Articles connexes


Comment supprimer profondément les clés d'un objet?

Charlotte J'ai cet objet json renvoyé d'une API qui a quelques bizarreries, et j'aimerais le normaliser afin que je puisse traiter l'entrée de la même manière pour chaque réponse. Cela signifie se débarrasser des clés superflues: Réponse: { _links: {...},