2016-09-28 23 views
2

謝謝你乍得的解決方案,但它現在似乎清除數組中的值,這裏是一個foreach在控制檯日誌,它顯示你我的情況(後面對於更新功能更新後的代碼):jQuery多維數組(動態鍵) - 無法設置屬性未定義

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˚F或者這樣做,因爲它可能與我目前正在寫的方式,我需要援助在糾正這個請。

一切除了driverLapTimes陣列上的第二個關鍵細,我希望它的輸出是這樣的:

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

但1,2,3,4鍵想出以下控制檯錯誤:

Uncaught TypeError: Cannot set property '1' of undefined

的功能代碼:

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; 

} 
+0

你可以發佈你的一些數據/數據結構的driverLapNumber陣列和driverLapTimes? – mhodges

+0

你是否將driverLapNumber [999]初始化爲數組? driverLapNumber [999] =新陣列() –

回答

3

在這種情況下,它可能ŧ數組項沒有被聲明爲新數組。試試這個:

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; 

} 

當然,你總是可以把這個聲明循環外通過創建前手來構建你的陣列的方法。

+0

這立即看起來合乎邏輯,是的,它的工作,非常感謝! –

+0

嗨乍得,請參閱我原來的帖子上的更新。 –

+1

首先:我會快速修復,檢查是否有內容。第二:如果我對你有所瞭解,那麼你的價值觀之前就在那裏,但之後會被清除掉?如果這是真的,你應該考慮創建一個方法來構造你的數組,並且不會聲明上面的循環的第二維。 –

0

嘗試如下,讓我知道

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

相關問題