web-dev-qa-db-ja.com

Javascriptで空の2次元配列を宣言しますか?

Javascriptで2次元配列を作成して、座標(x、y)を保存します。ユーザー入力によって動的に生成されるため、座標のペアの数はまだわかりません。

事前定義された2D配列の例:

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

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

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

これはおそらく非常に簡単です。私はJSの初心者であり、誰かが検証可能な短い作業コードスニペットを記述していただければ幸いです。ありがとう

49
Zannix

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

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 ]
69
DJG

そのようにマトリックスにアクセスできるようにしたい場合、matrix [i] [j]

ループで初期化するのが最も便利だと思います。

var matrix = [],
    cols = 3;

//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
    matrix[i] = []; 
}

これにより、[[]、[]、[]]が得られます。

そのため、matrix [0] [0] matrix [1] [0]は、「Uncaught TypeError:Undefinedのプロパティ '0'を設定できません」というエラーではなく、未定義を返します

20
Lorenzo Gangi

作成とともに初期化する場合は、 fill および map を使用できます。

const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));

5は行数、4は列数です。

19
AbhinavD

ES6

サイズ3行5列のマトリックスm

[...Array(3)].map(x=>Array(5).fill(0))       
let m = [...Array(3)].map(x=>Array(5).fill(0));

m[1][0] = 2;  // second row, first column
m[2][4] = 8;  // last element

// print formated array
console.log(JSON.stringify(m)
  .replace(/(\[\[)(.*)(\]\])/g,'[\n  [$2]\n]').replace(/],/g,'],\n  ')
);

.fill(0)を削除して、ゼロで初期化しないようにします。ボーナス

let Array2D = (r,c) => [...Array(r)].map(x=>Array(c).fill(0));
let b = Array2D(5,7);
console.log(JSON.stringify(b));
10

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

   var twoDee = [[]];
6
Kevin Bowersox

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

var arr = new Array([]);

プッシュデータ:

arr[0][0] = 'abc xyz';
5
Rahul Tripathi

空の配列は、次のように値を省略することで定義されます。

v=[[],[]]
a=[]
b=[1,2]
a.Push(b)
b==a[0]
4
UIlrvnd

関数を使用して配列を配列で埋めることができます。



var arr = [];
var rows = 11;
var columns = 12;

fill2DimensionsArray(arr, rows, columns);

function fill2DimensionsArray(arr, rows, columns){
    for (var i = 0; i < rows; i++) {
        arr.Push([0])
        for (var j = 0; j < columns; j++) {
            arr[i][j] = 0;
        }
    }
}
 </ code>

結果は次のとおりです。



Array(11)
0:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
5:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
6:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
7:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
8:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
9:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
10:(12)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
 </ code>

1
entoniperez

オブジェクトを作成し、そのオブジェクトを配列にプッシュします

 var jSONdataHolder = function(country, lat, lon) {

    this.country = country;
    this.lat = lat;
    this.lon = lon;
}

var jSONholderArr = [];

jSONholderArr.Push(new jSONdataHolder("Sweden", "60", "17"));
jSONholderArr.Push(new jSONdataHolder("Portugal", "38", "9"));
jSONholderArr.Push(new jSONdataHolder("Brazil", "23", "-46"));

var nObj = jSONholderArr.length;
for (var i = 0; i < nObj; i++) {
   console.log(jSONholderArr[i].country + "; " + jSONholderArr[i].lat + "; " + 
   jSONholderArr[i].lon);

}
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]))

「sum is 7」と読み上げてください

1
MadHaka

// 3 x 5配列用

new Array(3).fill(new Array(5).fill(0))
0
leannez

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)));
0
allenyllee