96

座標 (x,y) を格納する Javascript で 2 次元配列を作成したいと考えています。ユーザー入力によって動的に生成されるため、座標のペアがいくつあるかはまだわかりません。

定義済みの 2 次元配列の例:

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

PUSH メソッドを使用して、配列の最後に新しいレコードを追加できると思います。

空の 2 次元配列を宣言して、最初の Arr.push() を使用したときにインデックス 0 に追加され、push によって書き込まれる次のすべてのレコードが次のインデックスを取得するようにするにはどうすればよいですか?

これはおそらく非常に簡単に行うことができます。私は JS の初心者にすぎません。誰かが私が調べることができる短い作業コード スニペットを書いてくれれば幸いです。ありがとう

4

19 に答える 19

104

次のように通常の配列を宣言するだけです。

var arry = [];

次に、配列に追加する値のペアがある場合、必要なことは次のとおりです。

arry.push([value_1, value2]);

はい、最初に を呼び出すとarry.push、値のペアがインデックス 0 に配置されます。

nodejs repl から:

> var arry = [];
undefined
> arry.push([1,2]);
1
> arry
[ [ 1, 2 ] ]
> arry.push([2,3]);
2
> arry
[ [ 1, 2 ], [ 2, 3 ] ]

もちろん、JavaScript は動的に型付けされるため、配列が 2 次元のままであることを強制する型チェッカーはありません。座標のペアのみを追加し、次のことを行わないようにする必要があります。

> arry.push(100);
3
> arry
[ [ 1, 2 ],
  [ 2, 3 ],
  100 ]
于 2013-08-10T15:24:27.000 に答える
12

簡略構文を使用して、ある配列を別の配列内にネストできます。

   var twoDee = [[]];
于 2013-08-10T15:18:23.693 に答える
7

次のようなことを試すことができます:-

var arr = new Array([]);

プッシュデータ:

arr[0][0] = 'abc xyz';
于 2013-08-10T15:16:01.423 に答える
4

空の配列は、次のように値を省略して定義されます。

v=[[],[]]
a=[]
b=[1,2]
a.push(b)
b==a[0]
于 2013-08-10T15:17:59.473 に答える
3

一発ギャグ

let m = 3 // rows
let n = 3 // columns
let array2D = Array(m).fill().map(entry => Array(n))

この実装は、エントリごとに一意のサブ配列を作成します。したがって、設定array2D[0][1] = 'm'は各エントリの [1] インデックスを「m」に設定しません

于 2021-07-16T15:04:48.940 に答える
1

var arr = [];
var rows = 3;
var columns = 2;

for (var i = 0; i < rows; i++) {
    arr.push([]); // creates arrays in arr
}
console.log('elements of arr are arrays:');
console.log(arr);

for (var i = 0; i < rows; i++) {
    for (var j = 0; j < columns; j++) {
        arr[i][j] = null; // empty 2D array: it doesn't make much sense to do this
    }
}
console.log();
console.log('empty 2D array:');
console.log(arr);

for (var i = 0; i < rows; i++) {
    for (var j = 0; j < columns; j++) {
        arr[i][j] = columns * i + j + 1;
    }
}
console.log();
console.log('2D array filled with values:');
console.log(arr);

于 2020-06-15T17:57:03.493 に答える
0

ES2015 を使用せず、fill() がない場合は、単に使用します.apply()

https://stackoverflow.com/a/47041157/1851492を参照してください。

let Array2D = (r, c, fill) => Array.apply(null, new Array(r)).map(function() {return Array.apply(null, new Array(c)).map(function() {return fill})})

console.log(JSON.stringify(Array2D(3,4,0)));
console.log(JSON.stringify(Array2D(4,5,1)));

于 2019-07-27T15:03:16.060 に答える
-1

どうしたの

var arr2 = new Array(10,20);
    arr2[0,0] = 5;
    arr2[0,1] = 2
    console.log("sum is   " + (arr2[0,0] +  arr2[0,1]))

「合計は7」と読み上げる必要があります

于 2017-06-20T06:24:05.987 に答える
-2

通常、列の数はわかっていますが、行 (レコード) はわかっていない可能性があります。ここでは、上記の多くを利用した私のソリューションの例を示します。(ここにいる私よりも JS の経験が豊富な人 - ほとんどの人 - コード改善の提案は大歓迎です)

     var a_cols = [null,null,null,null,null,null,null,null,null];
     var a_rxc  = [[a_cols]];

     // just checking  var arr =  a_rxc.length ; //Array.isArray(a_rxc);
     // alert ("a_rxc length=" + arr) ; Returned 1 
     /* Quick test of array to check can assign new rows to a_rxc. 
        i can be treated as the rows dimension and  j the columns*/
       for (i=0; i<3; i++) {
          for (j=0; j<9; j++) {
            a_rxc[i][j] = i*j;
            alert ("i=" + i + "j=" + j + "  "  + a_rxc[i][j] );
           }
          if (i+1<3) { a_rxc[i+1] = [[a_cols]]; }
        }

そして、この配列をサーバーに渡す場合、私のために働くajaxは

 $.post("../ajax/myservercode.php",
       {
        jqArrArg1 : a_onedimarray,
        jqArrArg2 : a_rxc
       },
       function(){  },"text" )
        .done(function(srvresp,status) { $("#id_PageContainer").html(srvresp);} ) 
        .fail(function(jqXHR,status) { alert("jqXHR AJAX error " + jqXHR + ">>" + status );} );
于 2016-09-15T00:19:44.990 に答える