未定义

时间:2018-02-12 10:38:28

标签: javascript

我的代码产生以下错误:

  

未捕获的TypeError:无法设置未定义的属性“0”

首先,这是表格的截图 Table row

注意: 该表是学生的指定工作时间表。

让我们继续我的代码:

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变量

中 在第3次循环之后

将发生错误。这意味着每次创建工作时间表超过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++;
      }

1 个答案:

答案 0 :(得分:3)

您需要定义尝试访问的嵌套数组。它实际上归结为相同的原则:您解决以下问题:

    getSAWorkSched[wsCounter][wsCounter2]

... wsCounter值最终变为2,但您只在getSAWorkSched的初始化中定义了两个嵌套数组,因此getSAWorkSched[2]不存在 - 它会给你undefined。试图从零(undefined)获取数组元素是不可能的。因此,在else bock中添加此行:

    getSAWorkSched[wsCounter] = []; // <--- Add this
    getSAWorkSched[wsCounter][wsCounter2]=arr[j];

更优雅的代码

您可以使用$.mapslice以更优雅的方式撰写此内容:

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));
    }
}