Attraversamento di indici di array negativi in ??JScript
-
02-07-2019 - |
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.
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.