[英]JS object: Iteration till nth level
I have the following sample object: 我有以下示例对象:
{
"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"
}
}
}
}
It's a JS object that can be nested up to any level. 它是一个可以嵌套到任何级别的JS对象。 I'm trying to iterate through the object and do some action:
我正在尝试迭代对象并执行一些操作:
Following is my code: 以下是我的代码:
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
}
}
}
}
But the above code results in an infinite loop. 但是上面的代码会导致无限循环。 What am I doing wrong?
我究竟做错了什么?
You need to reference the local obj
inside of iterateObject
instead of the global jsonData
. 您需要引用
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; }
There is an issue in your below function 您的以下功能存在问题
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
}
}
}
}
It should be like below 它应该如下
function iterateObject(obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(!isLeafNode(obj[key])){
iterateObject(obj[key])
}else{
console.log("leaf node")
//do something
}
}
}
}
You are using jsonData in loop instead of passed argument obj 您在循环中使用jsonData而不是传递参数obj
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.