1

phpファイルからJavaScriptを生成します。この生成されたコードでは、多次元配列を作成してからデータを入力します。最初のネストされた配列は問題なく入力されますが、2番目の配列はTypeErrorをスローします:myArray[idx]は未定義です。

コードスニペットは次のとおりです。

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

4

2 に答える 2

6

をインクリメントidxしてから、これを実行します。

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

にオブジェクトを配置したことがないarrayMarkers[idx]ため、にプロパティを追加しようとするundefinedと、エラーが発生します。

新しいインデックスに配列を作成する場合は、次に示す2行目を追加します。

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

補足:入力するのarrayMarkers[idx]は配列([])ですが、配列として使用しているのではなく、オブジェクトとして使用しています。JavaScriptでそれを行うことができます(これらの配列は実際には配列ではないため)が、配列であるという事実を利用する場合を除いて、オブジェクトを使用するだけです。

arrayMarkers[idx] = {}; // Instead of []
于 2013-02-20T09:05:43.817 に答える
0
idx++;
                    arrayMarkers[idx]['breite'] = 43.3449053146323;

する必要があります

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

すべての操作が完了した後、次のインデックスに移動するようにします。それ以外の場合は、それらを使用すると、存在しない次のインデックスに値がインクリメントされます

または、同じ方法を維持する必要がある場合は、次のようにその値を初期化できます

idx++;
arrayMarkers[idx] = [];
arrayMarkers[idx]['breite'] = 43.3449053146323;
于 2013-02-20T09:05:38.500 に答える