【问题标题】:jQuery Multidimensional Array (dynamic key) - Cannot set property of undefinedjQuery多维数组(动态键) - 无法设置未定义的属性
【发布时间】:2017-02-07 00:49:21
【问题描述】:

感谢 Chad 的解决方案,但它现在似乎从数组中清除了值,这是控制台日志上的 foreach,它向您显示了我的情况(随后是更新功能的更新代码):

timer.html:60 ------------------------------------
timer.html:57 0
timer.html:58 undefined
timer.html:57 1
timer.html:58 1.910
2timer.html:60 ------------------------------------
timer.html:57 0
timer.html:58 undefined
timer.html:57 1
timer.html:58 undefined
timer.html:57 2
timer.html:58 1.727
2timer.html:60 ------------------------------------
timer.html:57 0
timer.html:58 undefined
timer.html:57 1
timer.html:58 undefined
timer.html:57 2
timer.html:58 undefined
timer.html:57 3
timer.html:58 0.690
timer.html:60 ------------------------------------

==============================================

function updateLap(kartId){

  if (isNaN(driverLapNumber[kartId])) {
     //IF LAP NOT SET THEN THE KART ID NEEDS TO BE SET AS 0 AS IT IS THE START OF THE RACE
     window.driverLapNumber[kartId] = 0;  
  }

  //ADD ONE LAP TO THE KART ID
  driverLapNumber[kartId]++;

  //ADD LAP TIME FOR CURRENT LAP NUMBER  
  driverLapTimes[kartId] = [];
  driverLapTimes[kartId][driverLapNumber[kartId]] = window.lapTime;

   $.each(driverLapTimes , function( index, obj ) {
    $.each(obj, function( key, value ) {
        console.log(key);
        console.log(value);     
    });
    console.log("------------------------------------");
  });


  $(".lapTimes").prepend("kartId: "+kartId+" - "+window.lapTime+"<br>");

}

我想我可以把这归咎于 PHP,因为我目前编写它的方式是可能的,我需要帮助来纠正这个问题。

除了driverLapTimes 数组上的 SECOND 键外,一切都很好,我希望它输出如下内容:

driverLapNumber[999][1] = 6.666;
driverLapNumber[999][2] = 6.666;
driverLapNumber[999][3] = 6.666;
driverLapNumber[999][4] = 6.666;

但是 1,2,3,4 键出现以下控制台错误:

未捕获的类型错误:无法设置未定义的属性“1”

功能代码:

function updateLap(kartId){

  if (isNaN(driverLapNumber[kartId])) {
     window.driverLapNumber[kartId] = 0;  
  }

  //ADD ONE LAP TO THE KART ID
  driverLapNumber[kartId]++;

  //ADD LAP TIME FOR CURRENT LAP NUMBER
  driverLapTimes[kartId][driverLapNumber[kartId]] = window.lapTime;  

}

【问题讨论】:

  • 您可以在 driverLapNumber 数组和 driverLapTimes 中发布您的一些数据/数据结构吗?
  • 您是否将 driverLapNumber[999] 初始化为数组? driverLapNumber[999] = new Array()

标签: javascript jquery arrays multidimensional-array


【解决方案1】:

在这种情况下,很可能数组项尚未声明为新数组。试试这个:

function updateLap(kartId){



if (isNaN(driverLapNumber[kartId])) {
     window.driverLapNumber[kartId] = 0;  
  }

  //ADD ONE LAP TO THE KART ID
  driverLapNumber[kartId]++;

  //ADD LAP TIME FOR CURRENT LAP NUMBER
  if(!driverLapTimes[kartId]){
       driverLapTimes[kartId] = [];
  }
  driverLapTimes[kartId][driverLapNumber[kartId]] = window.lapTime;  

}

当然,您总是可以将声明放在此循环之外,方法是先创建一个方法来构造您的数组。

【讨论】:

  • 这立即看起来合乎逻辑,是的,它有效,非常感谢!
  • 首先:我将在快速修复中进行编辑,以检查其中是否有东西。第二:如果我说得对,那么您的值之前存在,但之后从循环中清除了吗?如果这是真的,您应该考虑创建一个预先构造数组的方法,并且不声明上述循环的第二维。
  • 完美,非常感谢,我的 jQuery 生锈了,因为脚本不会那么大,我很高兴有一个简单的修复 :)
  • 乐于助人。我知道这可能无关紧要。但是由于 0 的单圈时间是错误的,如果其中有 0 的值,它将重新初始化数组,所以你会得到一个未定义的单圈时间而不是 0。只是说。
【解决方案2】:

试试下面告诉我

var a = new Array();
a[0]= new Array();
a[0].push(1);
a[0].push(2);
a[0].push(3);

console.log(a[0][0]);
console.log(a[0][1]);
console.log(a[0][2]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多