1

各最初の要素にインデックス番号を持つ 2 次元配列を作成したいと考えています。

(以前の質問でここまでたどり着きました >)

これは機能します:

$('#create_indexed_array').click(function() {
    var new_array = [[9,9],[9,9],[9,9],[9,9],[9,9]];
    for (var i = 0; i < 5; i++) {
        new_array[i][0] = i;
    }

    alert(JSON.stringify(new_array));

});

しかし、これは機能しません:

$('#create_indexed_array').click(function() {
    var new_array = new Array(new Array());
    for (var i = 0; i < 2; i++) {
        new_array[0][i] = ""; // create cols
    } 
    for (var i = 1; i < 5; i++) {
        new_array[i] = new_array[0]; // create rows
    }
    for (var i = 0; i < 5; i++) {
        new_array[i][0] = i; // set index
    }
    alert(JSON.stringify(new_array));

});

編集: 私の最終作業バージョン(これまでのところ):

var myArray  = [];
var rows = 5;
var cols = 2;

for (var i = 0; i < rows; i++) {
    myArray [i] = [];
    for (var j = 0; j < cols; j++) {
        if (j==0) myArray [i][j] = i;
        else myArray [i][j] = '';
    }
}

alert(JSON.stringify(myArray));

(r) 主に jfriend によるもの ;)

myArray = [[]] で最初に 2D 配列を宣言できない理由はまだわかりません。

4

2 に答える 2

1

現在のパターンに従って、次のように動作します。

$('#create_indexed_array').click(function() {
    var myArray = [[]];
    for (var i = 0; i < 2; i++) {
        myArray[0][i] = ""; // create cols
    } 
    for (i = 1; i < 5; i++) {
        // create copy of first row in each other row
        myArray[i] = myArray[0].slice(0); 
    }
    for (i = 0; i < 5; i++) {
        myArray[i][0] = i; // set index
    }
    alert(JSON.stringify(myArray));
});​

実際のデモ: http://jsfiddle.net/jfriend00/vJDPp/

覚えておく必要があるのは、配列を割り当てると、コピーではなくその配列への参照が割り当てられるため、配列の各要素を異なるものにしたい場合は、最初の行のコピーを物理的に作成して、後続の行に配置する必要があることです。行。また、名前を変更することをお勧めしnew_arrayます。これは、関数名に非常によく似ているため、コードを知らない人にとってはコードがわかりにくくなるからです。


最初のコード例のように 2D 配列をすべて 9 に初期化しようとしているだけの場合、これははるかに簡単になります。

$('#create_indexed_array').click(function() {
    var myArray = [];
    for (var i = 0; i < 5; i++) {
        myArray[i] = [];
        for (var j = 0; j < 2; j++) {
            myArray[i][j] = 9;
        }
    }
    alert(JSON.stringify(myArray));
});

または関数バージョン:

function create2DArray(lenX, lenY, initVal) {
    var myArray = [];
    for (var i = 0; i < lenX; i++) {
        myArray[i] = [];
        for (var j = 0; j < lenY; j++) {
            myArray[i][j] = initVal;
        }
    }
    return(myArray);
}
于 2012-12-12T16:33:56.637 に答える
0

組み込みの for ループで使用してみませんか?

For(var i = 0; i < 2; i++) {
     For(var j = 0; j < 5; j++) {
          new_array[i][j] = i; //set index
     }
}

このようにして、インデックスを一度に設定します。最初に宣言する必要があります。

以前の問題は、アイテムの配列とそのアイテムの配列の配列という 2 つの別個の配列のように扱っていたことでした。2D 配列は、2 次元の 1 つの配列です。

于 2012-12-12T16:31:00.377 に答える