45

Javascript で空の 2D 配列を作成するにはどうすればよいですか (新しい配列に含まれる行または列の数がわからない場合)。

単純な配列の場合は、必要なvar newArray = new Array();数の要素を割り当てることができます。しかし、2D 配列はどうでしょうか? 行数と列数を指定せずに作成できますか? その後、要素にアクセスするにはどうすればよいですか (myArray[0][1]またはmyArray[0,1])?

4

10 に答える 10

85

次のように 6 x 6 の空の配列を作成できます。

var myGrid = [...Array(6)].map(e => Array(6));
  • Array(6)長さ = 6 ですべての値を持つ配列を生成しundefinedます。
  • その配列を値でいっぱいの別の配列にマップしundefinedます。
  • undefined最終的に、ポジションでいっぱいの 6x6 グリッドが得られます。

デフォルト値でグリッドを初期化する必要がある場合:

var value = 'foo'; // by default
var myGrid = [...Array(6)].map(e => Array(6).fill(value));

これで、 でいっぱいの 6 x 6 グリッドができ'foo'ました。

于 2016-07-05T21:28:45.737 に答える
33

はい、空の配列を作成してから、データをそこにプッシュできます。JavaScript で最初に長さを定義する必要はありません。jsFiddle Live Demo の定義を
確認してください。

var arr = [[],[]];

プッシュデータ:

arr[0][2] = 'Hi Mr.A';
arr[1][3] = 'Hi Mr.B';

読み取りデータ:

alert(arr[0][2]);
alert(arr[1][3]);


アップデート

Brady Dowlingが推奨するビデオもここにあります:
2D 配列の作成

于 2013-05-12T21:29:52.533 に答える
14

Javascript には 2 次元配列はありません。

2 次元配列の効果を実現するには、配列の配列を使用します。これは、ジャグ配列とも呼ばれます (内側の配列の長さが異なる可能性があるため)。

他の空の配列と同様に、空のジャグ配列が作成されます。

var myArray = new Array();

空の配列リテラルも使用できます。

var myArray = [];

ジャグ配列に項目を入れるには、まず次のように内側の配列を入れる必要があります。

myArray.push([]);
myArray[0][0] = 'hello';

最初から多数の空の配列を含む配列を作成することもできます。

var myArray = [[],[],[]];

これにより、アイテムのないギザギザの配列が得られますが、これには 3 つの内部配列が用意されています。

配列の配列なので、 を使用して項目にアクセスしますmyArray[0][1]

于 2013-05-12T21:29:39.977 に答える
13

100x100 の 2 次元配列 (つまり行列) を作成したいとします。次のように 1 行で実行できます。

var 2darray = new Array(100).fill(null).map(()=>new Array(100).fill(null));

これにより、NULL の 100x100 マトリックスが作成されます。100x100 を任意のサイズに置き換え、null を好みのデフォルト値に置き換えるか、未定義の場合は空白にします。

于 2017-04-05T04:49:55.710 に答える
2

2つのこと:

1) 配列の長さプロパティは、var myArray = [[],[]]; の後に呼び出されると、配列の長さを正しく報告しません。声明。技術的には、空の配列が定義されているため、長さプロパティによってカウントされますが、長さプロパティの精神では、空でない要素がどの配列にも追加されていないため、実際には 0 を返す必要があります。

最小の回避策は、ネストされた 2 つの for( in ) ループ (1 番目の配列用と 2 番目の配列用) を使用し、未定義の要素をカウントすることです。

2) Siamak A.Motlagh の例を拡張し、 arr([2][4]) = 'Hi Mr.C'; を追加します。割り当ては、「Uncaught TypeError: 未定義のプロパティ '4' を設定できません」というエラーで失敗します。

jsFiddle を参照してください: http://jsfiddle.net/howardb1/zq8oL2ds/

そのコードのコピーを次に示します。

var arr = [[],[]];

alert( arr.length );  // wrong!

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );  // correct

arr[0][2] = 'Hi Mr.A';
alert(arr[0][2]);

arr[1][3] = 'Hi Mr.B';
alert(arr[1][3]);

arr[2][4] = 'Hi Mr.C';  // At this point I'm getting VM558:62 Uncaught TypeError: Cannot set property '4' of undefined
alert(arr[2][4]);

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );

3 番目の割り当てが失敗するのはなぜですか? [[],[]] 作成ステートメントは、最初の配列は 0 と 1 には有効であるが 2 には有効ではない、または 2 と 3 は 2 番目の配列には有効であるが 4 には有効ではないことを伝えているのでしょうか?

最も重要なのは、最初と 2 番目の配列に日付オブジェクトを保持できる配列内の配列をどのように定義するかということです。私は日付オブジェクトのように日付の配列を期待するjQuery-UI DatePickerを使用しています.2番目の日付配列を使用して時間を含む日付オブジェクトを含むように拡張したため、複数の日付を追跡できます. 1日に複数回。

ありがとう。

于 2016-09-22T12:48:57.257 に答える