递归删除JS对象中值为{}、""、[]的属性

一、判断JS对象为空的方法

  1. ES5
Object.keys(obj).length === 0 && obj.constructor === Object
  1. ES7+
Object.entries(obj).length === 0 && obj.constructor === Object
  1. ES5语法之前的实现方式
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return JSON.stringify(obj) === JSON.stringify({});
}
// 类型判断功能函数
function typeOf(value) {
    if (value !== value) {
        return 'NaN';
    }
    return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}
// 验证是否是{}、""、[]
function isEmpty(obj) {
    if (typeOf(obj) === 'string') {
        if (obj.trim() === '')
            return true;
        return false;
    }
        

    if (typeOf(obj) === 'array') {
        if (obj.length === 0)
            return true;
        return false;
    }
    if (typeOf(obj) === 'object') {
        for(var prop in obj) {
            if(obj.hasOwnProperty(prop))
                return false;
        }
        return JSON.stringify(obj) === JSON.stringify({});
    }
    return false;
}

// 递归删除
function deleteEmptyKeys(obj) {
    if (typeOf(obj) === 'object') {
        for (var key in obj) {
            if  (obj.hasOwnProperty(key)) {
                if (isEmpty(obj[key])) {
                    delete obj[key];
                } else if (typeOf(obj[key]) === 'object') {
                    deleteEmptyKeys(obj[key]);
                }
            }
        }
    }
}

你可能感兴趣的:(递归删除JS对象中值为{}、""、[]的属性)