Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按键检索嵌套对象_Javascript_Object_Search_Nested_Return - Fatal编程技术网

Javascript 按键检索嵌套对象

Javascript 按键检索嵌套对象,javascript,object,search,nested,return,Javascript,Object,Search,Nested,Return,通过以下对象中的键(itemID)检索嵌套对象的最有效方法是什么(考虑性能,假设对象可能很大) 显然,我可以通过首先引用每个父对象(searchResults.page2.item3)来访问该对象,但是如果我不知道它在哪个页面上,我如何仅使用itemID从searchResults检索item3呢 var searchResults = { page1 : { item1 : {}, item2 : {} }, page

通过以下对象中的键(itemID)检索嵌套对象的最有效方法是什么(考虑性能,假设对象可能很大)

显然,我可以通过首先引用每个父对象(searchResults.page2.item3)来访问该对象,但是如果我不知道它在哪个页面上,我如何仅使用itemID从searchResults检索item3呢

var searchResults = {

    page1 : {

        item1 : {},
        item2 : {}      

    },

    page2 : {

        item3 : {},
        item4 : {}  
    }

}

这看起来一点也不高效,但它满足了您的要求,只要“假设我不知道它在哪个页面上,我可以仅使用itemID从搜索结果中检索item3吗?”

var搜索结果={
第1页:{
第1项:{id:1},
项目2:{id:2}
},
第2页:{
第3项:{id:3},
项目4:{id:4}
}
}
var innerObjects=对象
.keys(搜索结果)
.地图(
函数(键、索引){
返回对象
.keys(搜索结果[关键字])
.地图(
函数(内部键、索引){
返回搜索结果[key][innerKey];
}
);
});
//log(innerObjects);
var flattedArray=[].concat.apply([],innerObjects);
//控制台日志(扁平阵列);
var idYoureLookingFor=3;
var objectYouWant=flattedArray.filter(函数(obj){return obj.id==idYoureLookingFor;});

console.log(objectYouWant)只需在对象中循环。这里有一个有效的解决方案。希望有帮助

var搜索结果={
第1页:{
项目1:{},
项目2:{}
},
第2页:{
第3项:{id:3},
项目4:{}
}
}
for(搜索结果中的var i){
var pageNumber=搜索结果[i];
用于(页码中的变量j){
var deeperProperty=页码[j];
if(deeperProperty.hasOwnProperty(“id”)和&deeperProperty.id==3){
控制台日志(deeperProperty);
}
}

}
使用递归函数检查整个对象,直到找到item3

var搜索结果={
第1页:{
项目1:{
身份证号码:1
},
项目2:{
身份证号码:2
}
},
第2页:{
项目3:{
身份证号码:3
},
项目4:{
身份证号码:4
}
}
}
/*开刀*/
递归_对象(搜索结果,0);
函数递归对象(obj,curIdx){
/*使用对象的所有键创建数组*/
var keys=Object.keys(obj);
/*检查是否已检查对象的所有关键点*/
if(curIdx0){
/*检查特定密钥中存在的任何密钥*/
递归对象(obj[keyVal],0);
}
/*现在增加索引以检查对象上的下一个键*/
curIdx++;
递归对象(obj,curIdx);
}
}
}
您直接从“最有效的方式”开始,请添加您的方式。