Question

J'ai un tableau fragmenté en Jscript, avec des éléments non nuls apparaissant aux indices négatif et positif. Lorsque j'essaie d'utiliser une boucle 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. Existe-t-il une méthode qui me permette de le faire?

Exemple

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

Lorsque vous passez en boucle, vous devriez me donner A puis C le B.

Était-ce utile?

La solution

Techniquement, "A" n'est pas du tout dans le tableau car vous ne pouvez pas avoir un index négatif. C'est juste un membre de l'objet arrName. Si vous vérifiez l'arrName.length, vous verrez qu'il est 21 (0,1,2, ..., 20) Pourquoi n'utilisez-vous pas un objet simple à la place (comme hashtable). Quelque chose comme ça devrait marcher:

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

Autres conseils

Vous entrez dans la limite entre Array s et Object s en Javascript. Les éléments du tableau sont accessibles par ordinal, entier compris entre 0 et 4294967294 (entier non signé 32 bits maximum - 1), inclus. Les propriétés des objets sont accessibles par nom. Puisque -10 n'est pas un nombre ordinal valide, il est interprété comme un nom. Voici un exemple plus 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 dans le tableau, aux indices 0 et 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top