javascript - JS 对象 : Iteration till nth level

标签 javascript

我有以下示例对象:

{
   "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/

相关文章:

JavaScript If 语句

javascript - 如何自定义对 window.location.href 的所有分配?

javascript - 用鼠标悬停打开/关闭导航,在移动设备上触摸?

javascript - IE浏览器日期时间问题

javascript:检查空白文本节点

javascript - 如何使用 KnockoutJS 根据 AJAX 调用的值设置下拉菜单?

javascript - 从 CSS 文件中的相对 URL 获取绝对

javascript - keyup 搜索事件时出现尴尬的闪烁

javascript - 与 Buffer().toString() 相反

javascript - 正则表达式匹配字符串末尾的字符,除非有多个实例