Domanda

Ho una matrice sparsa in Jscript, con elementi non nulli che si verificano sia in indici negativi che positivi. Quando provo ad usare un ciclo for in, non attraversa l'array dall'indice più basso (negativo) all'indice positivo più alto. Invece restituisce l'array nell'ordine in cui ho aggiunto gli elementi. L'enumerazione non funziona neanche. Esiste un metodo che mi permetterà di farlo?

Esempio

arrName = new Array();
arrName[-10] = "A";
arrName[20] = "B";
arrName[10] = "C";

Durante il loop, dovrebbe darmi A poi C il B.

È stato utile?

Soluzione

Tecnicamente, "A" non è affatto nell'Array poiché non è possibile avere un indice negativo. È solo un membro dell'oggetto arrName. Se controlli arrName.length vedrai che è 21 (0,1,2, ..., 20) Perché non usi invece un oggetto semplice (come hashtable). Qualcosa del genere dovrebbe funzionare:

<script type="text/javascript">
//define and initialize your object/hastable
var obj = {};
obj[20] = 'C';
obj[10] = 'B';
obj[-10] = 'A';

// get the indexes and sort them
var indexes = [];
for(var i in obj){
    indexes.push(i);
}
indexes.sort(function(a,b){
    return a-b;
});

// write the values to the page in index order (increasing)
for(var i=0,l=indexes.length; i<l; i++){
    document.write(obj[indexes[i]] + ' ');
}
// Should print out as "A B C" to the page
</script>

Altri suggerimenti

Stai entrando nel confine tra Array se Object in Javascript. Gli elementi dell'array sono accessibili da ordinale, un numero intero compreso tra 0 e 4294967294 (numero massimo di 32 bit senza segno - 1), incluso. Le proprietà degli oggetti sono accessibili per nome. Poiché -10 non è un numero ordinale valido, viene interpretato come un nome. Ecco un esempio più semplice:

var arr = new Array();
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.length

Il risultato è 2 - ci sono solo due elementi nell'array, agli indici 0 e 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top