我有以下示例对象:
{
"sampleA":{
"sampleB1":{
"sampleC1":{
"sample1":"sample",
"sample2":"sample",
"sample3":"sample",
"sample4":"sample",
"sample5":"sample"
},
"sampleB2":{
"sample1":"sample",
"sample2":"sample sample",
"sample3":"sample",
"sample4":"sample sample",
"sample5":"sample sample",
"sample6":"sample"
},
"sampleB3":{
"sample1":"sample",
"sample2":"sample sample",
"sample3":"sample sample",
"sample4":"sample sample",
"sample5":{
"sample6":"sample",
"sample7":"sample sample",
"sample8":"sample sample",
"sample9":"sample sample",
"sample10":"sample",
"sample11":"sample"
},
"sample100":"sample"
}
}
}
}
它是一个可以嵌套到任意层级的JS对象。我正在尝试遍历对象并执行一些操作:
以下是我的代码:
function isLeafNode(node) {
if (typeof node == typeof "string") {
return true;
} else {
return false;
}
}
iterateObject(jsonData);
function iterateObject(obj) {
for (var key in jsonData) {
if (jsonData.hasOwnProperty(key)) {
if(!isLeafNode(jsonData[key])){
iterateObject(jsonData[key])
}else{
console.log("leaf node")
//do something
}
}
}
}
但是上面的代码导致了无限循环。我做错了什么?
最佳答案
您需要在 iterateObject
中引用本地 obj
而不是全局 jsonData
。
function iterateObject(obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (!isLeafNode(obj[key])) {
iterateObject(obj[key]);
} else {
console.log(key, "leaf node");
}
}
}
}
function isLeafNode(node) {
return typeof node === "string";
}
var data = { sampleA: { sampleB1: { sampleC1: { sample1: "sample", sample2:"sample", sample3:"sample", sample4:"sample", sample5:"sample" },sampleB2: { sample1: "sample", sample2:"sample sample", sample3:"sample", sample4:"sample sample", sample5:"sample sample", sample6:"sample" },sampleB3: { sample1: "sample", sample2:"sample sample", sample3:"sample sample", sample4:"sample sample", sample5:{ sample6: "sample", sample7:"sample sample", sample8:"sample sample", sample9:"sample sample", sample10:"sample", sample11:"sample" },sample100: "sample" } } } };
iterateObject(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - JS 对象 : Iteration till nth level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552855/