/ / Javascript: conversione automatica da array 1xn 2d a vettore di lunghezza n - javascript, array, type-conversion

Javascript: conversione automatica da array 1xn 2d a vettore di lunghezza n - javascript, array, type-conversion

Sto leggendo alcuni valori da un database localeusando ado in IE8 e generando un array 2d. Voglio che il primo indice di questo array sia il campo e il secondo sia la riga. Per questo motivo, anche quando c'è un solo campo o una riga, voglio un array bidimensionale. Il seguente codice descrive adeguatamente il processo che sto usando per creare l'array:

function test() {
var a = new Array(1);
alert(a.length); // 1
for (var i=0; i<10; i++)
a[0,i] = i;
alert(a.length); // 10
}

Prima del ciclo, la lunghezza dell'array è 1. Successivamente è 10. Ciò significa che quando voglio un array 1xn, ottengo un vettore di lunghezza n.

Non ho nemmeno accesso ad altri browser per vedere se questo accade altrove. Sono molto limitato nei miei strumenti, ma questa è un'altra storia.

Grazie in anticipo per qualsiasi aiuto.

opaco

risposte:

3 per risposta № 1

Hai bisogno di questo:

function test() {
var a = [[]]; // create an array within an array using shorthand notation, don"t use new Array().

// a clearer way to explain the above is this:
// var a = []; // create an empty array with shorthand notation
// a[0] = []; // create an empty array as the first element of a

alert(a.length); // 1

for (var i = 0; i < 10; i++) {
a[0][i] = i;
}

alert(a.length); // 1
}​

Perché Javascript non ha veri array multidimensionali, dovrai accedere al secondo array con a[0][i]no a[0, i]. Questo perché stai veramente creando una serie di array.


1 per risposta № 2

Javascript non conosce gli array multidimensionali. Pertanto, è necessario:

var a = new Array(1);
alert(a.length); // 1
for (var i=0; i<a.length; i++) { // useless :-)
a[i] = new Array;
for (var j = 0; j < 10; j++)
a[0][j] = j;
}
alert(a.length); // 1

Il codice potrebbe essere più facile da capire usando la notazione abbreviata dell'array:

var a = [new Array(10)];
for (var i=0; i<a[0].length; i++)
a[0][i] = i;
alert(a.length); // 1

Il tuo approccio con a[0,i] è interpretato come a sequenza di espressione che valuta i, quindi sarebbe equivalente a a[i].