13

JavaScript で動的多次元配列を指定する際に、いくつかのガイダンスを使用できます。私は、javascript が多次元配列をネイティブに定義するのではなく、配列の配列を定義していることを理解しています。

 var items = [[1,2],[3,4],[5,6]];

また

 var array = [[,],[,]]

また

 var a = [[1,2],[3,4]]

私の問題は、実際の次元がわからず、上記の 2 番目の例のように単純に配列を定義しても、配列が 2 つのレコード セットを超えることができないことです。VB に似た REDIM stmt があると思いましたが、何も見つかりませんでした。

私の問題のもう 1 つの部分は、次の例のように、配列の 2 番目の次元を指定すると、for ブロックの外では配列に到達できなくなることです。

var Exforsys=new Array(4)
for (i=0; i <4; i++) {
   Exforsys[i]=new Array(4)
}

このような特定の配列からデータを取得しようとしています...

 function newTest() {
        var myArray = [[],[]];
      //  myArray[] = new Array(14);

        var recCount = coordsAry.length / 15;
        var n =0;

        var i = 0;
        var s = 0;

        for (i = 0; i < recCount; i++) {
            for (s = 0; s < 15; s++) {
              //  myArray[i] = new Array(14);

                myArray[i][s] = coordsAry[n];
                n++;

              //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

            }
            // var u = 4;
            s = 0;

            alert(myArray[0][3]);
            alert(myArray[0][4]);

            alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

        }

coordsAry には 105 のレコードがあり、{"12","Frank","564", ... etc} はフラットであることが証明されています。2番目のレコードが入力された後、このエラーが発生します....

Error: Unable to set value of the property '0': object is null or undefined.

明らかに、私の JavaScript のスキルは控えめに言っても少し荒いです。サンプルコードは大歓迎です。

ありがとう、

4

4 に答える 4

19

アレイを実際のサイズに暗くしないでください。

任意のインデックスの変数を好きなように設定できます

2次元が必要な場合は、配列を定義できます

var arr = []

要素を別の配列に設定する

arr[0] = []

「2次元」の要素内に値を入れます

arr[0][10] = 10

「最初の次元」の要素のみが配列になります

配列を配列に配置するようなこともできます

お気に入り

var arr = []
var arr1 = [1,2,3]
arr[0] = arr1
console.log(arr[0][2]) //3

また、配列があり、内部配列に要素をプッシュしたい場合は、要素が定義されているかどうかを確認してください。

var arr = []
for ( var i = 0; i < 5 ; i++) {
    if(!arr[i])
        arr[i] = []
    for ( var j = 0; j < 3 ; j++)
        arr[i][j] = i + " - " + j // Or like this,
        //arr[i].push(i + " " + j) // 
}
console.log( arr[2][3]) // 2 - 3

あなたが投稿したコードを考えると

function newTest() {
    var myArray = [[],[]];
  //  myArray[] = new Array(14);

    var recCount = 15
    var n =0;

    var i = 0;
    var s = 0;

    for (i = 0; i < recCount; i++) {
        if(!myArray[i])
             myArray[i] = []
        for (s = 0; s < 15; s++) {
            console.log(i)

          //  myArray[i] = new Array(14);

            myArray[i][s] = s;
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }
}
newTest()

これは私のために働く

</ p>

于 2012-12-05T14:23:30.637 に答える
3

すべての配列はjavascriptで動的です。あなたは次のようなことをすることができます

var list = [];
list[15] = 15;

また、配列を16の長さに拡張するだけで、最初の15個のインデックスの値は未定義(〜null)になります。したがって、多次元配列の3つの例はすべて機能するはずです。

編集:コードが含まれていることを確認しました。最初の次元の配列を初期化していない。あなたのループは

for (i = 0; i < recCount; i++) {

    //If the outer array does not have an inner array at this position already, create one
    if (!myArray[i])
        myArray[i] = []; //!!!

        for (s = 0; s < 15; s++) {
          //  myArray[i] = new Array(14);

            myArray[i][s] = coordsAry[n]; //myArray[i] returned null/undefined, when i got bigger then the declared array.
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }
于 2012-12-05T14:19:16.600 に答える
0

配列に要素を追加するには、push(val)(配列の後ろを追加する)またはunshift(val)を使用して配列の前に追加します。それで:

var Exforsys=[];
for (i=0; i <4; i++) {
   Exforsys.push([]);
}
于 2012-12-05T14:20:46.093 に答える