Frage

Ich habe einen Sparse-Array in Jscript, mit Nicht-Null-Elementen bei auftretenden sowohl negativen als auch positiven Indizes. Beim Versuch, eine verwenden, um in der Schleife, ist es nicht das Array von der niedrigsten (negativen) Index zu dem höchsten positiven Index durchquert. Stattdessen gibt es das Array in der Reihenfolge, dass I die Elemente hinzugefügt. Enumeration funktioniert auch nicht. Gibt es eine Methode, die mir erlauben, das zu tun?

Beispiel:

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

Beim Durchschleifen, es sollte ich ein dann C B.

War es hilfreich?

Lösung

Technisch „A“ ist nicht im Array überhaupt da Sie keinen negativen Index haben. Es ist nur ein Mitglied des arrName Objekts. Wenn Sie die arrName.length überprüfen, werden Sie sehen, dass es 21 (0,1,2, ..., 20) Warum Sie ein einfaches Objekt nicht stattdessen verwenden (als Hash-Tabelle). So etwas sollte funktionieren:

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

Andere Tipps

Sie stoßen in die Grenze zwischen Arrays und Objects in Javascript. Array-Elemente werden durch ordinal, eine ganze Zahl zwischen 0 und 4294967294 (maximal 32-bit unsigned integer - 1) zugegriffen wird, einschließlich. Objekteigenschaften werden mit Namen aufgerufen. Da -10 keine gültige Ordnungszahl ist, wird es als Name interpretiert. Hier ist ein einfacheres Beispiel:

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

Das Ergebnis ist, 2 - es gibt nur zwei Elemente in dem Array, bei Indizes 0 und 1

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top