首页 > 解决方案 > 为什么 for-of 循​​环中的这个对象解构不起作用?

问题描述

基本上以下代码不起作用,我不明白为什么。在嵌套循环中,我有一个名为“children”的变量,它是一个包含对象的数组,其中包含名为 children 的字段(例如在 DOM 树中)。但是当我尝试解构数组的每个元素时,它们看起来像是名称冲突。由于我使用的是 let 他们应该有不同的范围(至少,解构变量应该隐藏“父”)。很可能我错了,但我想了解原因。

let o = {
    children: [
     {children: [{}, {}, {}]},
     {children: [{}, {}, {}]}
    ]
};
for (let {children} of o.children) {
    console.log(children)
    for (let {children} of children) {
        console.log(children)
    }
}

标签: javascriptarraysloopsobjectecmascript-6

解决方案


接受这份声明,

for (let {children} of children)

您尝试创建一个新的局部变量,并采用与源相同的命名变量来获取新变量的元素。

这不起作用,因为两个变量之间没有区别。

如果您重命名目标或源变量,它将起作用。

let o = {
        children: [
            { children: [{ children: [{}, {}, {}] }, { children: [{}, {}, {}] }] },
            { children: [{ children: [{}, {}, {}] }, { children: [{}, {}, {}] }] },
        ]
    };

for (let { children } of o.children) {
    console.log(children)
    for (let { children: c } of children) { // rename here
        console.log(c)
    }
}


推荐阅读