0

Javascript で 1 つ以上の 2 次元配列を含むオブジェクトを作成したいと考えています。

次の方法で試しました(この例では、2次元配列を1つだけ追加しようとしています):

var XSIZE = 8;  
var YSIZE = 8;  
var obj = {  
 field : new Array(XSIZE),  
 field[0] : new Array(YSIZE),  
 foo : 1,  
 bar : 100  
}

情報:
- これにより、奇妙なエラー "missing : after property id" が表示されますが、これはあまり意味がないようです
- 残念ながら、Google を使用してこれまでにこれを行う方法を示す例は見つかりませんでした
- フィールドを追加しない場合[0] ... 2番目の配列を作成するために機能します。
- XSIZE と YSIZE を new Array(8)... のような数値に変更しても機能しません。

誰かがそれを行う方法を教えてくれたり、なぜこれをまったく行うことができず、他の方法を使用する必要があるのか​​ を説明していただければ幸いです.

どうもありがとう!

4

4 に答える 4

3

「missing : after property id」というエラーは、JavaScript がそのフィールドの値の前にあるコロンのfield部分を認識し、期待しているためです。field[0]代わりに、開き括弧を取得するため、文句を言います。

実行時にディメンションが設定されているオブジェクト定義をハードコーディングすることはできません。実行時にもオブジェクトをビルドする必要があります。このように

var XSIZE = 8;  
var YSIZE = 8;

var obj = {  
 field : new Array(),  
 foo : 1,  
 bar : 100  
}

for (var i = 0; i < XSIZE; i++) {
  obj.field.push(new Array(YSIZE));
}
于 2012-03-10T19:32:34.153 に答える
1

オブジェクト リテラル表記では、プロパティ名は正確にプロパティ名でなければなりません。まず、field[0]プロパティ名ではありません。次に、プロパティはオブジェクトが定義されるまで存在しないため、それまでプロパティにアクセスできません。

あなたがすべきことは、オブジェクトが作成された後に配列を設定することです:

var obj = {...}
obj.field[0] = [...];

または配列リテラルをネストします。

var obj = {
    field: [ [...],
              ...
           ],
    ...
}

要素を追加するとサイズが大きくなるため、配列を作成するときに配列サイズの設定について心配する必要はありません。

于 2012-03-10T19:33:09.593 に答える
0

そのように構築されているオブジェクトのプロパティのみを宣言できます。別の「レベル」のオブジェクトではありません。

for代わりにループを使用できます。

for(var i = 0; i < XSIZE; i++) {
  obj.field[i] = new Array(YSIZE);
}

YSIZE空の配列も問題なく機能するため、 は必要ないことに注意してください( [])。

于 2012-03-10T19:33:13.733 に答える