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