web-dev-qa-db-ja.com

push()二次元配列

私はそれを混乱させることなく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],
]

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

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

27
Jo3la

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

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

正しいバージョンの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);
    }
}
39
Sirko

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;
        }
    }
}
4
zzzzBov

すべての行をループし、欠落している行と列を追加する必要があります。既存の行の場合、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);
    }
}
4
Guffa

あなたの場合、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;    
}
3
ZER0
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;
    }
}

}
2
Daniel

AM配列を作成し、最初の配列に入れます。この場合、JSON応答からデータを取得します

$.getJSON('/Tool/GetAllActiviesStatus/',
   var dataFC = new Array();
   function (data) {
      for (var i = 0; i < data.Result.length; i++) {
          var serie = new Array(data.Result[i].FUNCAO, data.Result[i].QT, true, true);
          dataFC.Push(serie);
       });
0
CelzioBR

配列要素(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条件、if row <r、else if row> = rを使用して2つのループを結合することもできます。

0
Moataz Elmasry