我的代码产生以下错误:
未捕获的TypeError:无法设置未定义的属性“0”
注意: 该表是学生的指定工作时间表。
让我们继续我的代码:
function saveWorkSched(){
// listWorkSched
var arr=[];
var getSAWorkSched=[[],[]];
var wsCounter=0;
var wsCounter2=0;
var j = 0;
$("#listWorkSched td").each(function(){
arr.push($(this).text());
});
console.log(arr);
for(j;j<arr.length;j++){
if(wsCounter2<=2){
getSAWorkSched[wsCounter][wsCounter2]=arr[j];
wsCounter2++;
}else{
wsCounter++;
wsCounter2=0;
getSAWorkSched[wsCounter][wsCounter2]=arr[j];
wsCounter2++;
}
}
}
第一阶段:
在用户创建工作计划后,这将存储在arr
变量。
第二阶段:
arr
值将转换为多维数组,并存储在getSAWorkSched
变量
将发生错误。这意味着每次创建工作时间表超过2时,错误都会触发。
else{
wsCounter++;
wsCounter2=0;
getSAWorkSched[wsCounter][wsCounter2]=arr[j]; // Here's the code where the error specified based on the console of my browser
wsCounter2++;
}
答案 0 :(得分:3)
您需要定义尝试访问的嵌套数组。它实际上归结为相同的原则:您解决以下问题:
getSAWorkSched[wsCounter][wsCounter2]
... wsCounter
值最终变为2,但您只在getSAWorkSched
的初始化中定义了两个嵌套数组,因此getSAWorkSched[2]
不存在 - 它会给你undefined
。试图从零(undefined
)获取数组元素是不可能的。因此,在else
bock中添加此行:
getSAWorkSched[wsCounter] = []; // <--- Add this
getSAWorkSched[wsCounter][wsCounter2]=arr[j];
您可以使用$.map
和slice
以更优雅的方式撰写此内容:
function saveWorkSched() {
var arr = $.map($("#listWorkSched td"), function (td) {
return $(td).text();
});
var getSAWorkSched = [];
for (var j = 0; j < arr.length; j += 3) {
getSAWorkSched.push(arr.slice(j, j + 3));
}
}