Многомерный динамический массив 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([]);
}