如何访问Javascript中的嵌套对象?

时间:2019-09-20 01:08:24

标签: javascript

我遍历了SO和Google的每个问题,但都无济于事,这就是为什么我要创建重复项的原因,因为显然,由于没有答案,我的情况有所不同。

首先,我不明白为什么我不能仅使用.这样的符号来简单地访问对象内的对象:myObject.level1.level2.level3whichIsAObject,它返回{{1} }。我的结构是:

undefined

首先,我循环浏览高层:

myMainOjbect = { 
    attachment: {
        handle: 'attachment',
        slug: 'Images',
        state: {
            success: true,
            data: {
                activated: false,
                info: {
                    demo: 'demo-1',
                    component: 'attachment',
                },
                success: true,
            }
        }
    }
},
..

向我展示了for(let key in myMainOjbect) { const objectData = objectData[key]; } 子弹中的所有内容。但是,如果我想获取attachment,它会突然返回为objectData.state

这是怎么回事?为什么我不能只是简单地访问事物,其次,我实际上该怎么做呢?

最奇怪的部分是,如果我将原始对象作为全局对象存储在控制台中,并且执行与代码相同的操作:

enter image description here ...有效。

这是我(不是)得到的错误:

undefiend

在此演示中,它可以工作,除了我的代码(1:1复制)...无效。

3 个答案:

答案 0 :(得分:1)

您正在访问不是来自循环的变量。

您需要这样做。

const myMainOjbect = { 
    attachment: {
        handle: 'attachment',
        slug: 'Images',
        state: {
            success: true,
            data: {
                activated: false,
                info: {
                    demo: 'demo-1',
                    component: 'attachment',
                },
                success: true,
            }
        }
    }
};

for (const key in myMainOjbect) {
  console.log(myMainOjbect[key].state)
}

答案 1 :(得分:0)

尝试以下代码:

for (let key in myMainOjbect) {
    const objectData = myMainOjbect[key];
    console.log(objectData.state)
}

答案 2 :(得分:0)

const objectData = objectData[key];console.log(myMainOjbect[key].state)

不同
  

我不明白为什么我不能只访问对象中的对象

可以。有关示例,请参见下面的代码段

const myMainOjbect = {
  attachment: {
    handle: 'attachment',
    slug: 'Images',
    state: {
      success: true,
      data: {
        activated: false,
        info: {
          demo: 'demo-1',
          component: 'attachment',
        },
        success: true,
      }
    }
  }
};
const objectData = {};
for (const key in myMainOjbect) {
  objectData[key] = myMainOjbect[key];
}
console.log(objectData);
console.log(objectData.attachment.state);

const myState = myMainOjbect.attachment.state;
console.log(myState);