场景:我有一个包含多个子对象和子子对象的大型对象,这些对象的属性包含多种数据类型。出于我们的目的,这个对象看起来像这样:
var object = {
aProperty: {
aSetting1: 1,
aSetting2: 2,
aSetting3: 3,
aSetting4: 4,
aSetting5: 5
},
bProperty: {
bSetting1: {
bPropertySubSetting : true
},
bSetting2: "bString"
},
cProperty: {
cSetting: "cString"
}
}我需要遍历这个对象,并构建一个显示层次结构的键的列表,因此该列表最终如下所示:
aProperty.aSetting1
aProperty.aSetting2
aProperty.aSetting3
aProperty.aSetting4
aProperty.aSetting5
bProperty.bSetting1.bPropertySubSetting
bProperty.bSetting2
cProperty.cSetting我得到了这个函数,它循环遍历对象并输出键,但不是分层的:
function iterate(obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object") {
iterate(obj[property]);
}
else {
console.log(property + " " + obj[property]);
}
}
}
}有人能告诉我怎么做吗?这里有一个jsfiddle可供您使用:http://jsfiddle.net/tbynA/
发布于 2019-11-23 05:02:48
此函数可以处理包含对象和对象数组的对象。结果将是对象的每个单项一行,表示其在结构中的完整路径。
使用http://haya2now.jp/data/data.json进行测试
示例结果: geometry6.obs5.hayabusa2.delay_from
function iterate(obj, stack, prevType) {
for (var property in obj) {
if ( Array.isArray(obj[property]) ) {
//console.log(property , "(L=" + obj[property].length + ") is an array with parent ", prevType, stack);
iterate(obj[property], stack + property , "array");
} else {
if ((typeof obj[property] != "string") && (typeof obj[property] != "number")) {
if(prevType == "array") {
//console.log(stack + "[" + property + "] is an object, item of " , prevType, stack);
iterate(obj[property], stack + "[" +property + "]." , "object");
} else {
//console.log(stack + property , "is " , typeof obj[property] , " with parent ", prevType, stack );
iterate(obj[property], stack + property + ".", "object");
}
} else {
if(prevType == "array") {
console.log(stack + "[" + property + "] = "+ obj[property]);
} else {
console.log(stack + property , " = " , obj[property] );
}
}
}
}
}
iterate(object, '', "File")
console.log(object);https://stackoverflow.com/questions/15690706
复制相似问题