2013-02-20 76 views
1

我從一個php文件生成了一些javascript。在這個生成的代碼中,我創建了一個多維數組,然後填充它。第一個嵌套數組填充沒有問題,但第二個嵌套數組拋出TypeError:myArray [idx]未定義。數組的Javascript數組 - > array [index]是undefined

這裏有一個代碼片段:

function initialize() { 
       var arrayLabels = []; 
       var arrayMarkers = []; 
       var idx = 0; 
       arrayMarkers[idx] = []; 
       var mapLatlng = new google.maps.LatLng(40.6029248937, 7.7861327300); 
       var mapOptions = { center: mapLatlng, 
        zoom: 13, 
        mapTypeId: google.maps.MapTypeId.SATELLITE }; 
       var map = new google.maps.Map(document.getElementById("karte"), mapOptions); 
       var bounds = new google.maps.LatLngBounds(); 
        arrayMarkers[idx]['breite'] = 44.4114053473682; 
        arrayMarkers[idx]['laenge'] = 8.91858100891113; 
        arrayMarkers[idx]['farbe'] = "http://new.kfb.localhost:8888/img/ico/button2_gruen.png"; 
        arrayMarkers[idx]['hafen'] = "Ab/bis Genua"; 
        arrayMarkers[idx]['link'] = "Karte&#44; Wetter und<br>Landausfl&uuml;ge f&uuml;r<br><a href='hafen.php?hafen=172'>Genua</a><br>Sa, 16.03.13"; 
        idx++; 
        arrayMarkers[idx]['breite'] = 43.3449053146323; 

該錯誤是在最後一行拋出,指數已經增加之後。任何想法是什麼問題?

感謝 MK

+0

哪裏myArray的? – mplungjan 2013-02-20 09:05:25

+0

你需要做另一個'arrayMarkers [idx] = [];' – RichardTowers 2013-02-20 09:06:28

+0

@mplungjan這只是一個例子。該數組被稱爲arrayMarkers。 – midnig 2013-02-20 09:10:27

回答

5

該值你遞增idx,然後做這個:

arrayMarkers[idx]['breite'] = 43.3449053146323; 

你從來沒有把任何物體在arrayMarkers[idx],所以你最終想要的屬性添加到undefined,這將導致錯誤。

如果你想在新的索引創建一個數組,加上這裏顯示的第二行:

idx++; 
arrayMarkers[idx] = []; // <=== Add this 
arrayMarkers[idx]['breite'] = 43.3449053146323; 

旁註:你在arrayMarkers[idx]把事情陣列([])但你並沒有將它們用作數組,而是將它們用作對象。您可以做到這一點在JavaScript(因爲這些陣列aren't really arrays at all),但除非你打算利用他們的陣列的事實,我只是使用對象:

arrayMarkers[idx] = {}; // Instead of [] 
0
idx++; 
        arrayMarkers[idx]['breite'] = 43.3449053146323; 

應該

    arrayMarkers[idx]['breite'] = 43.3449053146323; 
idx++; 

讓你移動到下一個索引的所有操作完成之後。使用它們,否則增加值設置到下指數不存在

或者,如果它留在同樣的方式,那麼你可以初始化喜歡

idx++; 
arrayMarkers[idx] = []; 
arrayMarkers[idx]['breite'] = 43.3449053146323;