簡體   English   中英

計算typeof值為'object'的屬性在另一個對象中的數量

[英]Counting how many properties with a typeof value of 'object' are inside another object

我一直在進行一些迭代以獲得一定數量的值。

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

                        }
                    })
                })
            }) 

在這段代碼中,您將看到我正在遍歷一個名為“ Obj”的對象。 在它里面,我們將有一些數組和對象,因為它是一個非常復雜的結構。 但是,讓我們削減the不休。 一旦我們到達這一部分...

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

                }
            })

您會看到我們有條件的。 在這種情況下,我要檢查那些類型為'object'的屬性“ r”。 因此,如果我在條件中執行控制台檢查“ r”,則實際上將看到這些特定屬性。

所以,這是東西。 我為什么要這樣做? 好吧,我正在構建一個變量,該變量將僅存儲那些具有子屬性(其對象類型為typeof值)的“ l”元素。 那實際上是可行的,但問題是,就我的目的而言,我不僅需要此變量按預期工作,而且還需要僅存儲具有多個屬性且元素類型為typeof的元素。

因此,讓我們考慮這種情況:

如果我有兩個如下所示的對象...

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”元素中是否包含對象,還讓我知道其中有多少個對象,以及它們是否較小而不是一個,那么我的控制台日志不應該顯示它們。

希望它足夠清楚。

我的想法是設計一些可以遞歸且不會破壞堆棧的東西:

    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是您的示例,現在我將把您的第1個示例變成可以接受的示例:

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"]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM