首页 > 解决方案 > Javascript For 循环中的未定义属性

问题描述

我在 StackOverflow 上看不到这个问题的答案,但我觉得这会很尴尬,但这里是这样。

var project_ID;
var projectName;

var tabulatorRowData = {};
var projectData = []
var mainColumnHeading = {
        "id": project_ID,
        "projectID": project_ID,
        "projectName": projectName
}
tabulatorRowData.projectData = projectData;
for (i=0; i < 10; i++) {
    mainColumnHeading.id = 1;
    mainColumnHeading.projectID = 2;
    mainColumnHeading.projectName = "project Name";
    tabulatorRowData.projectData.push(mainColumnHeading);
    for (j=0; j < 10; j++) {
        tabulatorRowData.projectData[j].hours = j;
        tabulatorRowData.projectData[j].progress = j+20;
    }
}
console.log(tabulatorRowData);
console.log(JSON.stringify(tabulatorRowData));

我正在使用 Node.js 库在 Eclipse 中测试和运行它,它返回以下错误;

tabulatorRowData.projectData[j].hours = j;
TypeError: Cannot set property 'hours' of undefined

现在,如果我将有问题的代码放在for (i=0; i < 10; i++) {它的工作原理中,那么我知道这是一个范围问题,但无法弄清楚我可以做出什么声明来修复它。

标签: javascriptscope

解决方案


在这种情况下,循环的嵌套是错误的,您需要将它们分开:

for (i=0; i < 10; i++) {
    mainColumnHeading.id = 1;
    mainColumnHeading.projectID = 2;
    mainColumnHeading.projectName = "project Name";
    tabulatorRowData.projectData.push(mainColumnHeading);
}
for (j=0; j < 10; j++) {
    tabulatorRowData.projectData[j].hours = j;
    tabulatorRowData.projectData[j].progress = j+20;
}

原因是您在 -loop 中添加项目tabulatorRowData.projectDatai因此在 -loop 完成之前,您无法一次访问所有 10 个项目i


推荐阅读