Javascriptで2次元配列を作成して、座標(x、y)を保存します。ユーザー入力によって動的に生成されるため、座標のペアの数はまだわかりません。
事前定義された2D配列の例:
var Arr=[[1,2],[3,4],[5,6]];
Pushメソッドを使用して、配列の最後に新しいレコードを追加できると思います。
空の2次元配列を宣言して、最初のArr.Push()を使用するとインデックス0に追加され、Pushによって書き込まれる次のすべてのレコードが次のインデックスを取得するようにするにはどうすればよいですか?
これはおそらく非常に簡単です。私はJSの初心者であり、誰かが検証可能な短い作業コードスニペットを記述していただければ幸いです。ありがとう
次のように、通常の配列を宣言するだけです。
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 ]
そのようにマトリックスにアクセスできるようにしたい場合、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'を設定できません」というエラーではなく、未定義を返します
サイズ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));
簡単な構文を使用して、ある配列を別の配列内にネストできます。
var twoDee = [[]];
次のようなものを試すことができます:-
var arr = new Array([]);
プッシュデータ:
arr[0][0] = 'abc xyz';
空の配列は、次のように値を省略することで定義されます。
v=[[],[]]
a=[]
b=[1,2]
a.Push(b)
b==a[0]
関数を使用して配列を配列で埋めることができます。
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>
オブジェクトを作成し、そのオブジェクトを配列にプッシュします
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);
}
どうしたの
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」と読み上げてください
// 3 x 5配列用
new Array(3).fill(new Array(5).fill(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)));