【问题标题】:Issue with object property '0' of undefined未定义的对象属性“0”问题
【发布时间】:2018-02-26 16:02:41
【问题描述】:

我的代码产生以下错误:

未捕获的类型错误:无法设置未定义的属性“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++;
      }

【问题讨论】:

  • 定义“不起作用”。您遇到的具体问题是什么?
  • 第三次循环后,在浏览器的控制台上弹出此错误:Uncaught TypeError: Cannot set property '0' of undefined,这是浏览器指定的代码:getSAWorkSched[wsCounter][wsCounter2]=arr[j];else 部分.. 只是想让你知道当表格只有 2 行时它会起作用...但是当有 3 行及以上时会弹出错误

标签: javascript


【解决方案1】:

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

    getSAWorkSched[wsCounter][wsCounter2]

... wsCounter 的值最终会变为 2,但您在 getSAWorkSched 的初始化中只定义了两个嵌套数组,因此 getSAWorkSched[2] 不存在 - 它会给您 @987654325 @。尝试从无到有 (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));
    }
}

【讨论】:

  • 我将把代码放在哪里?在for 之前?还是在for里面?
  • 哦,等等,我想我明白了...我会在几秒钟内更新你
  • 它现在工作了!谢谢!我会接受你的回答..我不知道这就是触发错误的原因..该代码来自我的 php 我只是将它转换为 javascript...但是为什么在 javascript 中需要再次初始化但不同在 PHP 中
  • 添加了更优雅的选择。是的,当您引用索引时,PHP 会默默地为您创建嵌套数组。 JavaScript 并非如此。不同的语言 = 不同的规则 ;-)
  • 感谢您赐教...我不知道数组中的某些规则与 php & javascript 不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2021-02-22
  • 2016-08-03
  • 2012-08-26
相关资源
最近更新 更多