检查对象的递归方法

Recursive method for checking an object

所以我创建了一个构造函数,我正在尝试对其进行原型设计。我想要一种方法来检查对象中的每个 属性 以查看其是否为空以及是否 return 是密钥。如果 属性 是一个对象,我希望它也检查该子对象。

更新:

到目前为止我的代码:

function Properties(val1, val2, val3, val4){
    this.prop1 = val1 || "";
    this.prop2 = val2 || "";
    this.prop3 = val3 || "";
    this.prop4 = val4 || {};
}

Properties.prototype = {
    isEmpty: function(){
        for (key in this) {
            if(typeof this[key] == "object" && this[key] !== null){
                this[key].isEmpty();
            } else {
                if(!this[key]){
                    console.log(key);
                }
            }
        }
    }
}

var test = new Properties("Something", "", "", {subProp1: "Something Else", subProp2: "",   subProp3: {subSubProp1: "", subSubProp2: "" }});

方法应该returnprop2, prop3, subProp2, subSubProp1, subSubProp2

该方法不是对象上的 属性。您需要传入相关对象。您还可以传入一个数组来跟踪空键:

var emptyKeys = [];
function isEmpty(obj, keysArr) {
    for (var key in obj) {
        if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
            isEmpty(obj[key], keysArr);
        } else {
            if (obj[key] == "" || obj[key] == null) {
                keysArr.push(key);
            }
        }
    }
}

演示:http://jsfiddle.net/17rt0qy3/1/

如果你想在实际对象上使用这个,只需在 isEmpty 函数中添加上面的函数:

isEmpty: function(){
    var emptyKeys = [];
    amIEmpty(this, emptyKeys);

    return emptyKeys;

    //Actual logic
    function amIEmpty(obj, keysArr) {
        for (var key in obj) {
            if (key == "isEmpty") {
                continue;
            }

            if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
                amIEmpty(obj[key], keysArr);
            } else {
                if (obj[key] == "" || obj[key] == null) {
                    keysArr.push(key);
                }
            }
        }         
    }
 }

演示:http://jsfiddle.net/17rt0qy3/2/

还有一个 fiddle 使用上面的演示对象:http://jsfiddle.net/17rt0qy3/3/

Aa 和另一个编辑,这只会 log 键,但是 它有点干净:

isEmpty: function(obj, keys) {
    keys = keys || [];
    obj = obj || this;
    for (var key in obj) {
        if (typeof obj[key] === "object" && obj.hasOwnProperty(key)) {
            this.isEmpty(obj[key], keys)
        } else {
            if (obj[key] == "" || obj[key] == null) {
                keys.push(key);
            }
        }
    }

    return keys;
 }

演示:http://jsfiddle.net/17rt0qy3/8/