Ho una matrice sparsa il cui contenuto non è garantito per essere inserito nell'ordine di indice ma deve essere iterato nell'ordine di indice. Per scorrere attraverso una matrice sparsa, capisco che è necessario utilizzare una dichiarazione for..in.Come dovrei scorrere su un array sparse nell'ordine dell'indice?
Tuttavia, secondo this article:
Non v'è alcuna garanzia che per il ... in restituirà gli indici in alcun ordine particolare
Ma stackoverflow questions like this suggeriscono che, mentre gli ordini oggetto di proprietà non sono garantito, gli ordini di matrice sono:
proprietà di ordine in oggetti non sono garantiti in JavaScript, è necessario utilizzare un Arra y.
I tested this nelle ultime versioni di Chrome, Firefox e IE.
<ol id="items"></ol>
var list = [];
function addItem(index) {
list[index] = { idx : index };
}
var insertOrder = [ 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 ];
for (var i = 0; i < 15; i++) {
addItem(insertOrder[i]);
}
for(var item in list) {
$("#items").append("<li>" + list[item].idx + "</li>");
}
Tutti sembrano onorare l'ordine dell'indice in modo da poter sempre fido di questo sia il caso? Altrimenti, come posso ottenerli meglio nell'ordine dell'indice?
non vorrei prendere quella linea è stata citata come un'indicazione che l'ordine 'for..in' è garantito con gli array. (Non sto dicendo che non lo è, ma quella linea in realtà non sta dicendo che lo sia). Inoltre, ci sono [ottime ragioni] (http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea) per evitare l'uso ' for..in' con gli array, anche se l'ordine funziona ok. – JLRishe
Puoi vedere le differenze qui: http://jsfiddle.net/abhitalks/rfe33uxf/ – Abhitalks
c.f. [questa risposta] (http://stackoverflow.com/a/4261096/1945651): _ "Inoltre, l'ordine di iterazione non è garantito dalla specifica. Ciò significa che se si desidera" iterare "un oggetto array, con questa affermazione non può essere certa che le proprietà (indici di array) saranno visitate nell'ordine numerico. "_ – JLRishe