我试图了解递归如何处理可能具有相同键名的嵌套 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/