Push() двумерный массив - программирование

Push() двумерный массив

Я пытаюсь перейти к двумерному массиву без его запутывания, в настоящее время мой массив:

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],
]

Но он не знает и не уверен, что это правильный способ сделать это или нет.

Итак, вопрос в том, как бы я это сделал?

4b9b3361

Ответ 1

У вас есть некоторые ошибки в коде:

  • Используйте myArray[i].push( 0 );, чтобы добавить новый столбец. Ваш код (myArray[i][j].push(0);) будет работать в трехмерном массиве, поскольку он пытается добавить еще один элемент в массив в позиции [i][j].
  • Вы только расширяете (col-d) -на многие столбцы во всех строках, даже в тех, которые еще не были инициализированы и, таким образом, не имеют записей.

Одна правильная, хотя и довольно подробная версия, будет следующей:

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

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

Ответ 2

Вам нужно пройти все строки и добавить отсутствующие строки и столбцы. Для уже существующих строк вы зацикливаете от 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);
    }
}

Ответ 3

Итерация по двум измерениям означает, что вам нужно проверить два измерения.

Предполагая, что вы начинаете с:

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

Вы хотите развернуть этот двумерный массив, чтобы стать:

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

В вашем случае вы можете сделать это, не используя 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;    
}

Ответ 5

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

}

Ответ 6

вы вызываете push() в элементе массива (int), где 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, если строка < r, else, если row >= r

Ответ 7

Создайте массив 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);
       });