使用typeof值为' object'来计算有多少属性。在另一个对象

时间:2018-04-25 19:20:39

标签: javascript arrays object iteration each

我一直在做一些迭代以获得一定数量的值。

            $.each(Obj, function(k,v){
                $.each(v, function(j,l){
                    $.each(l, function(r,s){
                        if(l.hasOwnProperty(r) && typeof s === 'object'){

                        }
                    })
                })
            }) 

在此代码中,您将看到我正在迭代一个名为" Obj"的对象。在它内部,我们将拥有一些数组和对象,因为它是一个非常复杂的结构。但是,让我们切断喋喋不休。一旦我们到达这一部分......

           $.each(l, function(r,s){
                if(l.hasOwnProperty(r) && typeof s === 'object'){

                }
            })

您会看到我们有条件。在那个条件下,我要检查那些属性" r" typeof值为' object'。所以,如果我做一个控制台检查" r"在我的条件内,我实际上会看到那些特定的属性。

所以,这就是事情。我为什么要这样做?好吧,我正在构建一个仅存储那些" l"的变量。具有' object'的子属性的元素。作为一种类型的价值。这实际上是有效的,但问题是,出于我的目的,我需要这个变量不仅要按预期工作,而且还要只存储具有超过一个属性的元素' object&#39 ;作为一种类型的价值。

所以,让我们考虑一下这个案例:

如果我有两个对象,如下所示......

Obj1: [{"key":"value", "key":"value", "key":"[{"key":"value", "key":"value"}, { "key":"value", "key":"value"}]"}]

Obj1: [{"key":"value", "key":"value", "key":"[{"key":"value", "key":"value"}, { "key":"value", "key":"value"}]", "key":"[{"key":"value", "key":"value"}, { "key":"value", "key":"value"}]"}]

我希望我的变量只存储第二个变量,因为它有2个值,其中包含对象。

所以,在我的条件中,我想使用某种逻辑让我不仅知道我的" l" element里面有一个对象,但是我有多少个,如果它们比一个小,那么我的控制台日志就不应该把它们搞定。

希望它足够清楚。

1 个答案:

答案 0 :(得分:0)

我的想法是设计一些递归的东西,不会破坏堆栈:

    function inspect (obj,f,e,ledger) {
/*obj is the object to inspect,
f is the call back,
e is an internal reference to setTimeout,
ledger is the array that will be populated*/
                var ledger = ledger || [],
                    probObjCount = 0;
                f = f || false,
                e && e.value ? clearTimeout(e.value) : void(0);
                e = e || {};
                e.value = setTimeout(function(){f && f.call(ledger,ledger);},50);
                if(obj instanceof Array){
                    obj.forEach(function(d,i){
                        (typeof d === "object") && window.requestAnimationFrame(function(){
                            inspect(d,f,e,ledger);
                        })
                    })
                    return;
                }
                for (var i in obj) {
                    if(!obj.hasOwnProperty(i)){
                        continue;
                    }
                    if(typeof obj[i] === "object") {
                        ++probObjCount;
                        !function(obj){
                            window.requestAnimationFrame(function(){
                                inspect(obj,f,e,ledger);
                            })
                        }(obj[i]);
                    }
                }
                if(probObjCount >= 2){
                    ledger.push(obj);
                }
            }

您提供此功能2件事,一个要检查的对象和一个将提供分类帐(数组)的回调,该分类帐将是符合您条件的对象列表:

var x = [{"key1":"value", "key2":"value", "key3":[{"key4":"value", "key5":"value"}, { "key6":"value", "key7":"value"}]}];
inspect(x,function(l){console.log(l)});
//after a few seconds:
//[]

var x = [{"key1":"value", "key2":"value", "key3":[{"key4":"value", "key5":"value"}, { "key6":"value", "key7":"value"}], "key8":[{"key9":"value", "key10":"value"}, { "key11":"value", "key12":"value"}]}]
inspect(x,function(l){console.log(l)});
//[{…}]

以上2是你的例子,现在我将把你的第一个例子变成一个可以被接受的例子:

var x = [{"key1":"value", "key2":"value", "key3":[{"key4":["value"], "key5":["value"]}, { "key6":"value", "key7":"value"}]}]
inspect(x,function(l){console.log(l)});
//[{…}] you will get {"key4":["value"], "key5":["value"]}