32

私はそれを台無しにすることなく2次元配列にプッシュしようとしています.現在、私の配列は次のとおりです:

var myArray = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]

そして、私が試しているコードは次のとおりです。

var r = 3; //start from rows 3
var c = 5; //start from col 5

var rows = 8;
var cols = 7;

for (var i = r; i < rows; i++)
{
    for (var j = c; j < cols; j++)
    {
        myArray[i][j].push(0);
    }
}

その結果、次のようになります。

var myArray = [
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
]

しかし、これが正しい方法であるかどうかはわかりません。

問題は、これをどのように達成するかです。

4

9 に答える 9

45

コードにいくつかのエラーがあります:

  1. myArray[i].push( 0 );新しい列を追加するために使用します。あなたのコード ( myArray[i][j].push(0);) は、位置 で配列に別の要素を追加しようとするため、3 次元配列で機能し[i][j]ます。
  2. まだ初期化されていないため、これまでにエントリがない場合でも、すべての行で (col-d)-多くの列を展開するだけです。

詳細なバージョンではありますが、1つの正しいバージョンは次のとおりです。

var r = 3; //start from rows 3

var rows = 8;
var cols = 7;

// expand to have the correct amount or rows
for( var i=r; i<rows; i++ ) {
  myArray.push( [] );
}

// expand all rows to have the correct amount of cols
for (var i = 0; i < rows; i++)
{
    for (var j =  myArray[i].length; j < cols; j++)
    {
        myArray[i].push(0);
    }
}
于 2012-07-05T14:06:08.640 に答える
4

すべての行をループして、不足している行と列を追加する必要があります。既存の行については、c から cols までループし、新しい行については、最初に空の配列を外側の配列にプッシュし、次に 0 から cols までループします。

var r = 3; //start from rows 3
var c = 5; //start from col 5

var rows = 8;
var cols = 7;

for (var i = 0; i < rows; i++) {
  var start;
  if (i < r) {
    start =  c;
  } else {
    start = 0;
    myArray.push([]);
  }
  for (var j = start; j < cols; j++) {
        myArray[i].push(0);
    }
}
于 2012-07-05T14:09:16.513 に答える
4

2 次元を反復するということは、2 次元をチェックする必要があることを意味します。

あなたがから始めていると仮定します:

var myArray = [
    [1,1,1,1,1],
    [1,1,1,1,1],
    [1,1,1,1,1]
]; //don't forget your semi-colons

この 2 次元配列を次のように拡張します。

var myArray = [
    [1,1,1,1,1,0,0],
    [1,1,1,1,1,0,0],
    [1,1,1,1,1,0,0],
    [0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0],
];

つまり、違いが何であるかを理解する必要があります。

外側の配列から始めます。

var myArray = [
    [...],
    [...],
    [...]
];

この配列を長くしたい場合は、それが正しい長さであることを確認し、違いを補うために内側の配列を追加する必要があります。

var i,
    rows,
    myArray;
rows = 8;
myArray = [...]; //see first example above
for (i = 0; i < rows; i += 1) {
    //check if the index exists in the outer array
    if (!(i in myArray)) {
        //if it doesn't exist, we need another array to fill
        myArray.push([]);
    }
}

次のステップでは、すべての配列のすべての列を反復処理する必要があります。元のコードに基づいて構築します。

var i,
    j,
    row,
    rows,
    cols,
    myArray;
rows = 8;
cols = 7; //adding columns in this time
myArray = [...]; //see first example above
for (i = 0; i < rows; i += 1) {
    //check if the index exists in the outer array (row)
    if (!(i in myArray)) {
        //if it doesn't exist, we need another array to fill
        myArray[i] = [];
    }
    row = myArray[i];
    for (j = 0; j < cols; j += 1) {
        //check if the index exists in the inner array (column)
        if (!(i in row)) {
            //if it doesn't exist, we need to fill it with `0`
            row[j] = 0;
        }
    }
}
于 2012-07-05T14:16:23.850 に答える
3

あなたの場合push、まったく使用せずにそれを行うことができます:

var myArray = [
    [1,1,1,1,1],
    [1,1,1,1,1],
    [1,1,1,1,1]
]

var newRows = 8;
var newCols = 7;

var item;

for (var i = 0; i < newRows; i++) {
    item = myArray[i] || (myArray[i] = []);

    for (var k = item.length; k < newCols; k++)
        item[k] = 0;    
}
于 2012-07-05T14:17:46.103 に答える
2
var r = 3; //start from rows 3
var c = 5; //start from col 5

var rows = 8;

var cols = 7;


for (var i = 0; i < rows; i++)

{

 for (var j = 0; j < cols; j++)

 {
    if(j <= c && i <= r) {
      myArray[i][j] = 1;
    } else {
      myArray[i][j] = 0;
    }
}

}
于 2012-07-05T14:07:26.287 に答える
0

配列要素(int)でpush()を呼び出しています。ここで、配列でpush()を呼び出す必要があります。また、この方法で配列を処理/埋めることは意味がありません。このようにすることはできません

for (var i = 0; i < rows - 1; i++)
{
  for (var j = c; j < cols; j++)
  {
    myArray[i].push(0);
  }
}


for (var i = r; i < rows - 1; i++)
{

  for (var j = 0; j < cols; j++)
  {
      col.push(0);
  }
}

if 条件を使用して 2 つのループを結合することもできます。 if row < r, else if row >= r

于 2012-07-05T14:14:29.277 に答える