我一直在做一些迭代以获得一定数量的值。
$.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里面有一个对象,但是我有多少个,如果它们比一个小,那么我的控制台日志就不应该把它们搞定。
希望它足够清楚。
答案 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"]}