javascript - 无法理解嵌套 javascript 对象中的递归行为

标签 javascript recursion

我试图了解递归如何处理可能具有相同键名的嵌套 js 对象。例如,在下面的对象中,嵌套中的键是相同的。 因此,当我循环播放时,我希望 obj[keys] 始终位于第一行(标记为//Line 1)。

我想了解如果所有键都具有相同的名称,js 将如何知道考虑循环哪个嵌套。不确定我哪里理解错了

var obj = {
  a: {         // Line 1
    a: {       // Line 2
      a: {     // Line 3
        sweptArea: 5
      }
    }
  }
}

function loop(obj, keyName) {
  for (var keys in obj) {
    if (obj.hasOwnProperty(keys) && typeof obj[keys] === 'object') {
      if (obj[keys][keyName] !== undefined) {
        console.log(obj[keys][keyName])
      } else {
        // In my understanding in all the iteration it will point to obj.a marked as line one
        loop(obj[keys], 'sweptArea')
      }
    }

  }

}

loop(obj, 'sweptArea')

最佳答案

当你说 obj[keys] 只是在 obj 上寻找同名的键。该表达式本身不执行递归。

每次调用函数时,传递给 obj 参数定义的变量的值都是不同的。

关于javascript - 无法理解嵌套 javascript 对象中的递归行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816510/

相关文章:

javascript - 如何使用 Ajax 动态更新 JSON-LD 脚本?

javascript - 如何从 Express 中的 API 获取要在 Angular 中显示的数据?

Javascript - 使用变量获取对象值

c++ - BST 递归查找高度

function - Prolog 中的递归函数

javascript - 模态无法正常工作,CSS 未填充,<span> 损坏

java - 如何在 JavaFX 中获取父节点中的所有节点?

c++ - 如何在C++中将整数链接列表递归拆分为奇数和偶数列表?

r - R中的尾递归

javascript - 为什么不能在 Angular 配置中使用提供程序?