Многомерный динамический массив javascript

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

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

или

 var array = [[,],[,]]

или

 var a = [[1,2],[3,4]]

Моя проблема в том, что я не знаю фактических измерений, и просто определение массива, как и во втором примере выше, все еще не позволяет массиву выйти за пределы двух наборов записей. Я думал, что REDIM stmt похож на VB, но не смог найти что-либо.

Еще одна часть моей проблемы заключается в том, что когда я указываю второе измерение массива, как в приведенном ниже примере, массив становится недоступным вне блока for.

var Exforsys=new Array(4)
for (i=0; i <4; i++) {
   Exforsys[i]=new Array(4)
}

Я пытаюсь извлечь данные из моего определенного массива, как это...

 function newTest() {
        var myArray = [[],[]];
      //  myArray[] = new Array(14);

        var recCount = coordsAry.length / 15;
        var n =0;

        var i = 0;
        var s = 0;

        for (i = 0; i < recCount; i++) {
            for (s = 0; s < 15; s++) {
              //  myArray[i] = new Array(14);

                myArray[i][s] = coordsAry[n];
                n++;

              //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

            }
            // var u = 4;
            s = 0;

            alert(myArray[0][3]);
            alert(myArray[0][4]);

            alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

        }

coordsAry имеет 105 записей и является плоским, { "12", "Frank", "564",... и т.д.} это доказано. После заполнения второй записи я получаю эту ошибку....

Error: Unable to set value of the property '0': object is null or undefined.

Очевидно, что мои навыки javascript немного грубые, если не сказать больше. Любой образец кода будет с благодарностью.

Спасибо,

Ответ 1

Вы не уменьшаете массив до фактического размера,

Вы можете просто установить переменную в любом индексе для того, что вы хотите

если вы хотите, чтобы два измерения вы могли определить массив

var arr = []

установить элемент в другой массив

arr[0] = []

и поместите значение внутри элемента во втором измерении

arr[0][10] = 10

У вас есть только элементы в "первом измерении" как массив

Вы также можете делать такие вещи, как размещение массивов в массивы

как

var arr = []
var arr1 = [1,2,3]
arr[0] = arr1
console.log(arr[0][2]) //3

И если у вас есть массив и вы хотите нажимать элементы во внутреннем массиве, просто выполните проверку, если элемент определен, например

var arr = []
for ( var i = 0; i < 5 ; i++) {
    if(!arr[i])
        arr[i] = []
    for ( var j = 0; j < 3 ; j++)
        arr[i][j] = i + " - " + j // Or like this,
        //arr[i].push(i + " " + j) // 
}
console.log( arr[2][3]) // 2 - 3

Учитывая введенный вами код

function newTest() {
    var myArray = [[],[]];
  //  myArray[] = new Array(14);

    var recCount = 15
    var n =0;

    var i = 0;
    var s = 0;

    for (i = 0; i < recCount; i++) {
        if(!myArray[i])
             myArray[i] = []
        for (s = 0; s < 15; s++) {
            console.log(i)

          //  myArray[i] = new Array(14);

            myArray[i][s] = s;
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }
}
newTest()

Это работает для меня

Ответ 2

Все массивы являются динамическими в javascript. Вы можете делать такие вещи, как

var list = [];
list[15] = 15;

И он просто расширит массив до 16, причем значения для первых 15 индексов будут undefined (~ null). Таким образом, ваши 3 примера многомерных массивов должны работать.

Изменить: Просто увидел, что вы включили свой код. Вы не инициализируете массивы вашего первого измерения. Ваш цикл должен быть

for (i = 0; i < recCount; i++) {

    //If the outer array does not have an inner array at this position already, create one
    if (!myArray[i])
        myArray[i] = []; //!!!

        for (s = 0; s < 15; s++) {
          //  myArray[i] = new Array(14);

            myArray[i][s] = coordsAry[n]; //myArray[i] returned null/undefined, when i got bigger then the declared array.
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }

Ответ 3

Чтобы добавить элемент в массив, вы можете использовать push (val) (чтобы добавить заднюю часть массива) или unshift (val) для добавления к фронту массива. Итак:

var Exforsys=[];
for (i=0; i <4; i++) {
   Exforsys.push([]);
}