javascript - 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++) {
它的工作原理中,那么我知道这是一个范围问题,但无法弄清楚我可以做出什么声明来修复它。
解决方案
在这种情况下,循环的嵌套是错误的,您需要将它们分开:
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.projectData
,i
因此在 -loop 完成之前,您无法一次访问所有 10 个项目i
。
推荐阅读
- c# - Async TcpClient Connect 在 Windows 和 Linux 上部署时不同
- javascript - 比较两个数组时如何更改数组中的值
- angular5 - 无法从 Angular 6 降级到 Angular 5
- html - 使用@page css 在每个页面上添加边距
- dynamics-crm - 如何在crm中获取选项集的标签
- excel - excel中的VBA代码与非常简单的代码运行不一致
- forms - 使用 Flutter 将表单上传到 Firestore
- bootstrap-4 - 折叠时无法使居中徽标重新定位到右侧
- function - 由于 NanoMatch 问题,Firestore 的 Firebase 功能失败
- asp.net-mvc - 出现错误“此命令只能在通过 CLI 运行时在 CLI 项目错误中运行”