Подтвердить что ты не робот

Объявить пустой двумерный массив в Javascript?

Я хочу создать двумерный массив в Javascript, где я собираюсь хранить координаты (x, y). Я еще не знаю, сколько пар координат у меня будет, потому что они будут динамически генерироваться с помощью ввода пользователем.

Пример предварительно заданного массива 2d:

var Arr=[[1,2],[3,4],[5,6]];

Думаю, я могу использовать метод PUSH для добавления новой записи в конец массива.

Как объявить пустой двухмерный массив, чтобы при первом использовании Arr.push() он будет добавлен в индекс 0, и каждая следующая запись, написанная нажатием, примет следующий индекс?

Это, вероятно, очень легко сделать, я просто новичок с JS, и я был бы признателен, если бы кто-то мог написать короткий фрагмент рабочего кода, который я мог бы изучить. Благодаря

4b9b3361

Ответ 1

Вы можете просто объявить обычный массив следующим образом:

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 ]

Ответ 2

Если вы хотите иметь доступ к матрице так, Матрица [I] [J]

Я считаю наиболее удобным инициализировать его в цикле.

var matrix = [],
    cols = 3;

//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
    matrix[i] = []; 
}

это даст вам   [[], [], []]

так   Матрица [0] [0]   Матрица [1] [0] return undefined, а не ошибка "Uncaught TypeError: невозможно установить свойство" 0 "из undefined"

Ответ 3

Если вы хотите инициализировать вместе с созданием, вы можете использовать fill и map.

const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));

5 - количество строк, а 4 - количество столбцов.

Ответ 4

ES6

Матрица m размером 3 строки и 5 столбцов

[...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  ')
);

Ответ 5

Вы можете вложить один массив в другой с помощью сокращенного синтаксиса:

   var twoDee = [[]];

Ответ 6

Вы можете попробовать что-то вроде этого: -

var arr = new Array([]);

Нажмите данные:

arr[0][0] = 'abc xyz';

Ответ 7

Пустой массив определяется путем опущения значений, например:

v=[[],[]]
a=[]
b=[1,2]
a.push(b)
b==a[0]

Ответ 8

Что случилось с

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"

Ответ 9

Вы можете заполнить массив массивами, используя функцию:

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

Результат:

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]

Ответ 10

Создайте объект и поместите этот объект в массив

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

}

Ответ 11

Я огляделся по разным ответам, и там действительно было много разнообразия. Это самый быстрый массив 2d, который я мог бы создать:

a = [];
a.fill(a); // Fill 1st dimension with 2nd dimension.

a[0,0] = "I'm";  
a[3,3] = "a";
a[33,33] = "nerd."; // I think the comma notation is new with ES6.

Или...

var a = b = [];
a.fill(b); // Maybe less confusing.

Оба работают для меня. Первый кажется, что он может быть рекурсивным: -D

Ответ 12

Если мы не используем ES2015 и не имеем fill(), просто используйте .apply()

Смотрите fooobar.com/questions/288023/...

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

Ответ 13

//для массива 3 x 5

new Array(3).fill(new Array(5).fill(0))

Ответ 14

Обычно мы знаем количество столбцов, но, возможно, не строк (записей). Ниже приведен пример моего решения, в котором используется большая часть из приведенного выше. (Для тех, кто здесь более опытен в JS, чем я - почти всегда - любые предложения по улучшению кода приветствуются)

     var a_cols = [null,null,null,null,null,null,null,null,null];
     var a_rxc  = [[a_cols]];

     // just checking  var arr =  a_rxc.length ; //Array.isArray(a_rxc);
     // alert ("a_rxc length=" + arr) ; Returned 1 
     /* Quick test of array to check can assign new rows to a_rxc. 
        i can be treated as the rows dimension and  j the columns*/
       for (i=0; i<3; i++) {
          for (j=0; j<9; j++) {
            a_rxc[i][j] = i*j;
            alert ("i=" + i + "j=" + j + "  "  + a_rxc[i][j] );
           }
          if (i+1<3) { a_rxc[i+1] = [[a_cols]]; }
        }

И если передача этого массива в секцию ajax, который работает для меня, это

 $.post("../ajax/myservercode.php",
       {
        jqArrArg1 : a_onedimarray,
        jqArrArg2 : a_rxc
       },
       function(){  },"text" )
        .done(function(srvresp,status) { $("#id_PageContainer").html(srvresp);} ) 
        .fail(function(jqXHR,status) { alert("jqXHR AJAX error " + jqXHR + ">>" + status );} );