2008-09-27 7 views
3

J'ai un tableau clairsemé dans Jscript, avec des éléments non-nuls se produisant à la fois sur les indices négatifs et positifs. Lorsque j'essaie d'utiliser une boucle for in, elle ne traverse pas le tableau de l'index le plus bas (négatif) à l'index positif le plus élevé. Au lieu de cela, il retourne le tableau dans l'ordre dans lequel j'ai ajouté les éléments. L'énumération ne fonctionne pas non plus. Y a-t-il une méthode qui me permettra de faire cela?Traversing négatif Indétries de tableau dans JScript

Exemple

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

lors du bouclage, il devrait me donner un C puis B.

Répondre

9

Techniquement, "A" est pas dans le tableau du tout, puisque vous ne pouvez pas avoir un indice négatif. C'est juste un membre de l'objet arrName. Si vous vérifiez arrName.length, vous verrez que c'est 21 (0,1,2, ..., 20) Pourquoi n'utilisez-vous pas un objet simple à la place (comme une hashtable). Quelque chose comme cela devrait fonctionner:

<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> 
4

Vous heurtant la frontière entre Array s et Object s en Javascript. Les éléments du tableau sont accédés par ordinal, un entier compris entre 0 et 4294967294 (entier non signé maximal de 1 à 32 bits - 1), inclusivement. Les propriétés de l'objet sont accessibles par nom. Puisque -10 n'est pas un nombre ordinal valide, il est interprété comme un nom. Voici un exemple simple:

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

Le résultat est 2 - il n'y a que deux éléments du tableau, à des indices 0 et 1.

Questions connexes