Javascript 在不知道名称的情况下访问对象中对象的多个属性值

Javascript 在不知道名称的情况下访问对象中对象的多个属性值,javascript,object,properties,Javascript,Object,Properties,为了 我可以使用: var data = { "title1": {"subtitle1": "one", "subtitle2": "two"}, "title2": "three", "title3": "four" }; title1 title2 title3 要获得: for (var key in data) { console.log(key); } var key = Object.keys(data)[0]; for (var prop in data[key]

为了

我可以使用:

var data = { "title1": {"subtitle1": "one", "subtitle2": "two"}, "title2": "three", "title3": "four" };
title1

title2

title3
要获得:

for (var key in data) {
  console.log(key);
}
var key = Object.keys(data)[0];

for (var prop in data[key]){
  console.log(data[key][prop]);
}
我可以使用:

var data = { "title1": {"subtitle1": "one", "subtitle2": "two"}, "title2": "three", "title3": "four" };
title1

title2

title3
要获得:

for (var key in data) {
  console.log(key);
}
var key = Object.keys(data)[0];

for (var prop in data[key]){
  console.log(data[key][prop]);
}
问题:我可以使用什么来获得:

one 

two

您要寻找的是一个递归循环。从


第8行是您处理内容的地方,在本例中,我注销了键和值,您要查找的是一个递归循环。从


第8行是您完成工作的地方,在本例中,我注销了键和值,您可以对其使用迭代递归方法

函数对象{ Object.keysobject.foreachk函数{ 如果对象的类型[k]==“对象”{ iterobject[k]; 回来 } console.logobject[k]; }; } 变量数据={title1:{subtitle1:1,subtitle2:2},title2:3,title3:4};
iterdata 您可以使用迭代递归方法来实现它

函数对象{ Object.keysobject.foreachk函数{ 如果对象的类型[k]==“对象”{ iterobject[k]; 回来 } console.logobject[k]; }; } 变量数据={title1:{subtitle1:1,subtitle2:2},title2:3,title3:4}; iterdata 试试这个

风险值数据={ 标题1:{ 副标题1:一,, 副标题2:两个 }, 标题2:三, 标题3:4 }; var输出=[]; Object.keysdata.forEachfunctionkey{ 如果数据类型[键]==对象{ Object.keysdata[key].forEachfunctioninnerKey{ output.pushdata[key][innerKey] }; }否则{ 输出。pushdata[键]; } }; console.logoutput 试试这个

风险值数据={ 标题1:{ 副标题1:一,, 副标题2:两个 }, 标题2:三, 标题3:4 }; var输出=[]; Object.keysdata.forEachfunctionkey{ 如果数据类型[键]==对象{ Object.keysdata[key].forEachfunctioninnerKey{ output.pushdata[key][innerKey] }; }否则{ 输出。pushdata[键]; } }; console.logoutput 你可以试试这个

function eachRecursive(obj)
{
    for (var k in obj)
    {
        if (typeof obj[k] == "object" && obj[k] !== null)
            eachRecursive(obj[k]);
        else
            console.log(k, obj[k]);
    }
}
你可以试试这个

function eachRecursive(obj)
{
    for (var k in obj)
    {
        if (typeof obj[k] == "object" && obj[k] !== null)
            eachRecursive(obj[k]);
        else
            console.log(k, obj[k]);
    }
}

您可以使用递归函数深入挖掘对象层次结构,并以所需的任何格式列出所有值。这种东西

函数getValuesobj{ var returnVal=; 如果obj!==null{ 如果obj的类型==“对象”{ Object.keysobj.forEachfunctionkey{ returnVal=returnVal+getValuesobj[key]+'\n'; }; }否则{ returnVal=returnVal+obj+'\n'; } } 返回值; } 风险值数据={ 标题1:{ 副标题1:一,, 副标题2:两个 }, 标题2:三, 标题3:4 };
console.loggetValuesdata 您可以使用递归函数深入挖掘对象层次结构,并以所需的任何格式列出所有值。这种东西

函数getValuesobj{ var returnVal=; 如果obj!==null{ 如果obj的类型==“对象”{ Object.keysobj.forEachfunctionkey{ returnVal=returnVal+getValuesobj[key]+'\n'; }; }否则{ returnVal=returnVal+obj+'\n'; } } 返回值; } 风险值数据={ 标题1:{ 副标题1:一,, 副标题2:两个 }, 标题2:三, 标题3:4 };
console.loggetValuesdata 如果您想在数据结构上更通用,可以使用以下方法直接访问json叶:

在Xpath中,所有叶表达式都是/*[非*],而在JSONPath中,则变成$..[?@.length>=0],因此

[结果类型:arg&&arg.结果类型.结果类型.结果类型.结果.值.值.值.结果:[,,,[结果::]正常化:函数.函数.函数.函数.函数.函数.函数.函数.函数.表达式.函数.表达式.表达式.政府.函数.表达式,arg{{变量.变量.变量.函数.函数.变量.函数.函数.变量.函数.变量.函数.变量.变量.函数.函数.变量.函数.函数.变量.变量.函数.变量.变量.函数.变量.变量.变量.变量.变量.变量.函数.变量.变量.函数.变量.变量.变量.函数.变量.变量.函数.变量.变量.变量.变量.变量.变量.变量.变量.变量.变量.变量.函数.变量.变量.变量.函数.变量.变量.变量.变量.变量.结果.结果.结果.值.值.值.值.值.值.值.值.值.值.值.结果.结果.结果.结果e[0-9*.$/.测试t[a]的测试[a],[t[a][t[a][t[a][t[a][t[a][a]的[t[a][t[a][t[a][t[a][t[a]的t[C.SpSpSplit;P.split;r=,r=,r=,a=t=t=t=t=e.t=t=e.t=e.t=e.t=e.t=e.t=t=e.t=C=C=C=C=C=C=C=C=C=C=C=C=C[a]的[a],,[a],[a],[a],[a],[a],[a],[a],[C[C[C[a],[C[a[a[a],[a]以下][a]::::[a]以下]==nP.walkn,a,t,r,functione,t,r,a,n[P.tracee(P.tracee+++r,一个,一个,一个,一个,一个,t,r,函数,t,t,r,r,功能,t,t,r,一个,一,一个,n{对象==一种类型的[e]和P.tracee,一个,一,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一{{{{{{{对象{对象{对象==一个.一个.对象的类型的对象==一个.一个类型的类型的一个[对象的一个[一个[一个[对象==一个[对象的类型的一个[\.*?\$/.testn?P.walkn,a,t,r,functione,t,r,a,n[P.P.evalt.替换替换.[P.P.P.P.P.P.evalt.替换.[P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.替换.[P.P.P.P.P.P.[P.e],e]e和P.e]e和P.e和P.P.tracee和P.tracee++r,a,a,a,a,n}:://[a,a,a,a,n}:://[0-n}:[0-0-0-0-9]-[0-9.[0-9]*:[0-0-0-0-9]替换.[0-9]*:[0-0-9]**:[0-9]::[0-9]*:[0-0-9]****::片:函数e,t,r,数组的{ifr instanceof[0-9]*:[0-9]*:[0-9]*:[0-9]:[0-9],[0-9].[0-9]*元元元元元元音,g,功能e,t,r,l=0,t,r,l=r,l=0,r,l=0,s=0,s=0,s=s=s=s=s=s=s=r,s=s=s=s=r,s=s=s=r,s=s=r,s=s=r,s=s=s=s=s=r,s=r,s=r=s=r=r=s=r=r=r=r=r=r=r=r=s=r,c,c,s=s=s=s=r=s=s=s=s=r=r=r=r=r=r=r=r=r=s=r,c,c,c,c,c,c X,_v,_vnam e{try{return$&&&&u v&&evalx.replace/@/g,{u v}catch{throw new SyntaxErrorjsonPath:+e.message+:+x.replace/@/g,{u v.replace/\^/g,{u a}},$=obj;返回expr&&obj&&VALUE==P.resultType | | PATH==P.resultType?P.traceP.normalizeexpr.replace/^\$;/,,obj,$,P.result.length?P.result:!1:无效0} //我已经向JSONPath添加了一些扩展 var jsonPathStore=functionobj,路径,值{ var-maps=jsonpathbj,路径,{resultType:path} maps.mapfunctionitem,索引{ 返回eval+项。替换/\$/,obj+'='+值[索引]+'+; } } var jsonPathDelete=functionobj,路径{ var-maps=jsonpathbj,路径,{resultType:path} maps.mapfunctionitem,索引{ 返回eval+“删除”+项。替换/\$/,obj+; } } var jsonPathRead=functionobj,路径{ var-maps=jsonpathbj,路径,{resultType:path} 返回maps.mapfunctionitem,索引{ 返回评估+项目。替换/\$/,obj+; } } 变量数据={title1:{subtitle1:1,subtitle2:2},title2:3,title3:4}; // //xpath所有叶表达式为/*[非*] //在jspath中变成$..[?@.length>=0] var jsonObjectLeafValues= jsonPathReaddata,$..[?@.length>=0]; //此XPath将读取从根元素开始的所有id属性
console.log JSON.stringify jsonObjectLeafValues,null,2如果您希望在数据结构上更通用,您可以使用它直接访问JSON Leaf:

在Xpath中,所有叶表达式都是/*[非*],而在JSONPath中,则变成$..[?@.length>=0],因此

[结果类型:arg&&arg.结果类型.结果类型.结果类型.结果.值.值.值.结果:[,,,[结果::]正常化:函数.函数.函数.函数.函数.函数.函数.函数.函数.表达式.函数.表达式.表达式.政府.函数.表达式,arg{{变量.变量.变量.函数.函数.变量.函数.函数.变量.函数.变量.函数.变量.变量.函数.函数.变量.函数.函数.变量.变量.函数.变量.变量.函数.变量.变量.变量.变量.变量.变量.函数.变量.变量.函数.变量.变量.变量.函数.变量.变量.函数.变量.变量.变量.变量.变量.变量.变量.变量.变量.变量.变量.函数.变量.变量.变量.函数.变量.变量.变量.变量.变量.结果.结果.结果.值.值.值.值.值.值.值.值.值.值.值.结果.结果.结果.结果e[0-9*.$/.测试t[a]的测试[a],[t[a][t[a][t[a][t[a][t[a][a]的[t[a][t[a][t[a][t[a][t[a]的t[C.SpSpSplit;P.split;r=,r=,r=,a=t=t=t=t=e.t=t=e.t=e.t=e.t=e.t=e.t=t=e.t=C=C=C=C=C=C=C=C=C=C=C=C=C[a]的[a],,[a],[a],[a],[a],[a],[a],[a],[C[C[C[a],[C[a[a[a],[a]以下][a]::::[a]以下]==nP.walkn,a,t,r,functione,t,r,a,n[P.tracee(P.tracee+++r,一个,一个,一个,一个,一个,t,r,函数,t,t,r,r,功能,t,t,r,一个,一,一个,n{对象==一种类型的[e]和P.tracee,一个,一,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一{{{{{{{对象{对象{对象==一个.一个.对象的类型的对象==一个.一个类型的类型的一个[对象的一个[一个[一个[对象==一个[对象的类型的一个[\.*?\$/.testn?P.walkn,a,t,r,functione,t,r,a,n[P.P.evalt.替换替换.[P.P.P.P.P.P.evalt.替换.[P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.替换.[P.P.P.P.P.P.[P.e],e]e和P.e]e和P.e和P.P.tracee和P.tracee++r,a,a,a,a,n}:://[a,a,a,a,n}:://[0-n}:[0-0-0-0-9]-[0-9.[0-9]*:[0-0-0-0-9]替换.[0-9]*:[0-0-9]**:[0-9]::[0-9]*:[0-0-9]****::片:函数e,t,r,数组的{ifr instanceof[0-9]*:[0-9]*:[0-9]*:[0-9]:[0-9],[0-9].[0-9]*元元元元元元音,g,功能e,t,r,l=0,t,r,l=r,l=0,r,l=0,s=0,s=0,s=s=s=s=s=s=s=r,s=s=s=s=r,s=s=s=r,s=s=r,s=s=r,s=s=s=s=s=r,s=r,s=r=s=r=r=s=r=r=r=r=r=r=r=r=s=r,c,c,s=s=s=s=r=s=s=s=s=r=r=r=r=r=r=r=r=r=s=r,c,c,c,c,c,c x,_v,_vname{try{return$&&&&&u v&&evalx.replace/@/g,_v}catch{throw new SyntaxErrorjsonPath:+e.message+:+x.replace/@/g,{u v.replace/\^/g,{u a}}}},$=obj;return expr&&obj&&VALUE==P.resultType | | PATH==P.resultType?P.traceP.normalizeexpr.replace/^\$,P.result.length?P.result:!1:void 0} //我已经向JSONPath添加了一些扩展 var jsonPathStore=functionobj,路径,值{ var-maps=jsonpathbj,路径,{resultType:path} maps.mapfunctionitem,索引{ 返回eval+项。替换/\$/,obj+'='+值[索引]+'+; } } var jsonPathDelete=functionobj,路径{ var-maps=jsonpathbj,路径,{resultType:path} maps.mapfunctionitem,索引{ 返回eval+“删除”+项。替换/\$/,obj+; } } var jsonPathRead=functionobj,路径{ var-maps=jsonpathbj,路径,{resultType:path} 返回maps.mapfunctionitem,索引{ 返回评估+项目。替换/\$/,obj+; } } 变量数据={title1:{subtitle1:1,subtitle2:2},title2:3,title3:4}; // //xpath所有叶表达式为/*[非*] //在jspath中变成$..[?@.length>=0] var jsonObjectLeafValues= jsonPathReaddata,$..[?@.length>=0]; //此XPath将读取从根元素开始的所有id属性
console.log JSON.stringify jsonObjectLeafValues,null,2谢谢,这很好用。所以forEach函数只作用于数组的每个元素?谢谢大家responded@fivedoor是的,在本例中,数组的元素是关键。谢谢,这非常有效。所以forEach函数只作用于数组的每个元素?谢谢谁responded@fivedoor是的,在本例中,数组的元素是键。