[英]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.