次のような多次元配列があります。
var map = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]];
次に、いくつかの変数に応じて、両方の次元で配列を「サイズ変更」する関数がいくつかあります。これは私がそれを行う方法です:
function resizeArr(arr, rows, rowsDiff, cols, colsDiff) {
var arrLength = arr.length;
if (colsDiff > 0) {
i=0;
while (i<arrLength) {
j=0;
while (j<colsDiff) {
arr[i].push(0);
j++
}
i++
}
}
if (colsDiff < 0) {
i=0;
while (i<arrLength) {
j=0;
colsDiffAbs = Math.abs(colsDiff);
while (j<colsDiffAbs) {
arr[i].pop();
j++
}
i++
}
}
if (rowsDiff > 0) {
fullColsArr = makeArrayOf(0, cols);
i=0;
while (i<rowsDiff) {
arr.push(fullColsArr);
i++
}
}
if (rowsDiff < 0) {
rowsDiffAbs = Math.abs(rowsDiff);
i=0;
while (i<rowsDiffAbs) {
arr.pop();
i++
}
}
return arr;
}
基本的に、これら 4 つの if ステートメントを使用して、rowsDiff/colsDiff 変数が正か負かに応じて、いくつかの値をポップアウトするか、いくつかの新しい値 (ゼロ) をプッシュします。
私の問題は、配列のサイズを map[4][4] の最大値から map[9][9] に変更すると、次のようになるため、すべて問題ないように見えることです。
[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]]
私の新しい配列として、正しく見えます。ただし、特定の値を map[9][9] に割り当てようとすると、新しい各配列の最後の値が次のように埋められます。
[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14]]
最後から 2 番目の値 (map[9][8]) に値を割り当てようとすると、他のすべての値の最後から 2 番目の値も埋められます。
しかし、配列の元の部分に値を割り当てると、正しく機能します。ここで何が間違っているのですか?
できる限り説明するように努めました。詳細についてはお気軽にお問い合わせください。