删除具有未定义值的属性后删除空对象

时间:2017-10-13 22:11:19

标签: javascript

我有一个对象:

{
   a: undefined,
   b: 'B',
   c: { d: undefined }
}

我想删除所有未定义值的属性,如果object为空,则删除父属性。

function removeEmpty (object) {
            Object.keys(object).forEach((key) => {
                if (object[key] && typeof object[key] === 'object') {
                     removeEmpty(object[key]);
                }
                else if (object[key] == null || !object[key].length) delete object[key]
            });

            return object;
        }

我知道这不起作用,因为当指向对象[键]时,' c'保护,这个不是空的。

1 个答案:

答案 0 :(得分:3)

检查清洁后是否可以移除物体(实际上,这正是Felix Kling提出的)。该版本还解决了Keith指出的问题:

function removeEmpty(object) {
    Object.keys(object).forEach((key) => {
        if (object[key] && typeof object[key] === 'object') {
            removeEmpty(object[key]);
            if (Object.keys(object[key]).length === 0) // <---- Check whether there
                delete object[key];                      // <---- no objects in current one
        }
        else if (object[key] == null || (typeof object[key] === 'object' && object[key].length === 0)) {
            delete object[key];
        }
    });

    return object;
}
removeEmpty({
    a: undefined,
    b: 'B',
    c: { d: undefined },
    test: 1,
    test2: 0,
    test3: []
})

// Produces {b: "B", test: 1, test2: 0}

以前的版本:

function removeEmpty(object) {
    Object.keys(object).forEach((key) => {
        if (object[key] && typeof object[key] === 'object') {
            removeEmpty(object[key]);
            if (Object.keys(object[key]).length === 0) // <---- Check whether there
                delete object[key];                    // <---- no objects in current one
        }
        else if (object[key] == null || !object[key].length) delete object[key]
    });

    return object;
}

enter image description here