2

カンマで区切られた数字のトライアドと 1 行に 1 つのトライアドで構成されるテキストを 2D 配列に読み込みたいと思います。配列の次元がどうなるかは事前にわかりません。次のコードを使用します。

        // Read data into a matrix
        var inputData = [[]];
        while (allTextLines.length>0) {
            dataRecord=allTextLines.shift();
            entries = dataRecord.split(',');
            var xCoord=parseInt(entries.shift());
            var yCoord=parseInt(entries.shift());
            var zCoord=parseInt(entries.shift());
            if (yCoord>=inputData.length) inputData[yCoord]=[];
            inputData[yCoord][xCoord]=zCoord;
        }

これにより、

TypeError: can't convert undefined to object

電話しようとすると Firebug から

            if (yCoord>=inputData.length) inputData[yCoord]=[];

また

            inputData[yCoord][xCoord]=zCoord;

現在のサイズよりも大きいインデックスに値を割り当てることで、JavaScript 配列のサイズを動的に変更できると考えました。

4

1 に答える 1

4

それらが存在する場合、それらは動的にサイズ変更できます。JavaScript には 2D 配列のようなものはありません。初期化で作成するのは、最初の要素に配列を持つ 1D 配列です。

2 番目の次元に何かを追加する前に、最初の次元を確認するだけです。あなたは今それをほとんどやっているので、それはマイナーな変更です:

if (inputData[yCoord] == null) inputData[yuCoord] = [];

「yCoord」が最初に 3 の場合、位置 3 を初期化した後も位置 0、1、および 2 は null のままになるため、長さをチェックするだけでなく、これを行う必要があります。その後、「yCoord」値 2 は失敗します。長さをチェックしますが、それでもスロットは空です。

または、次のようなこともできます。

for (var yplus = inputData.length; yplus <= yCoord; inputData[yplus++] = []);
于 2013-08-07T17:21:07.910 に答える