Wenn ich ein neues JavaScript-Array erstelle und eine Ganzzahl als Schlüssel verwende, wird jedes Element dieses Arrays bis zur Ganzzahl als undefiniert erstellt.
Beispielsweise:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
gibt 2298 undefined's und einen 'Some string' aus.
Wie soll ich JavaScript dazu bringen, 2300 als Zeichenfolge anstelle einer Ganzzahl zu verwenden, oder wie soll ich verhindern, dass 2299 leere Indizes instanziiert werden?
javascript
associative-array
Peter Mortensen
quelle
quelle
0.25
und.25
in dieselbe Zeichenfolge auflösen"0.25"
. Also , wenn Sie gebrochene Schlüssel verwenden, können Sie die Eigenschaft eines numerisch eingestellten Schlüssels abrufen0.25
verwenden0.25
,.25
,"0.25"
aber nicht".25"
.Sie können einfach ein Objekt verwenden:
quelle
Wie die Leute sagen, konvertiert JavaScript eine Zahlenfolge in eine Ganzzahl, so dass es nicht möglich ist, sie direkt in einem assoziativen Array zu verwenden, aber Objekte funktionieren für Sie auf ähnliche Weise, wie ich denke.
Sie können Ihr Objekt erstellen:
Und fügen Sie die Werte hinzu, wenn das Array funktioniert:
Dies wird Ihnen geben:
Danach können Sie wie ein Array in anderen Sprachen darauf zugreifen und den Schlüssel erhalten:
Ich habe getestet und funktioniert.
quelle
Wenn der Anwendungsfall Daten in einer Sammlung speichert, stellt ECMAScript 6 den
Map
Typ bereit .Es ist nur schwerer zu initialisieren.
Hier ist ein Beispiel:
Ergebnis:
quelle
Andere Antworten zusammenstellen:
Objekt
Wenn Sie eine Zahl als Schlüssel für eine neue Eigenschaft verwenden, wird die Zahl zu einer Zeichenfolge:
Wenn Sie mit derselben Nummer auf den Wert der Eigenschaft zugreifen, wird die Nummer erneut in eine Zeichenfolge umgewandelt:
Wenn Sie die Schlüssel vom Objekt erhalten, werden sie jedoch nicht wieder in Zahlen umgewandelt:
Karte
ECMAScript 6 ermöglicht die Verwendung des Map-Objekts ( Dokumentation , Vergleich mit Object ). Wenn Ihr Code lokal interpretiert werden soll oder die ECMAScript 6-Kompatibilitätstabelle für Ihre Zwecke grün genug aussieht, sollten Sie eine Karte verwenden:
Es wird keine Typkonvertierung zum Guten und zum Schlechten durchgeführt:
quelle
Verwenden Sie ein Objekt anstelle eines Arrays. Arrays in JavaScript sind keine assoziativen Arrays. Sie sind Objekte mit Magie, die mit Eigenschaften verknüpft sind, deren Namen wie Ganzzahlen aussehen. Diese Magie ist nicht das, was Sie wollen, wenn Sie sie nicht als traditionelle Array-ähnliche Struktur verwenden.
quelle
Versuchen Sie es mit einem Objekt, nicht mit einem Array:
quelle
var a = []; a[Math.pow(2, 30)] = 'hello';
Sie es aus und Sie werden nicht sehen, dass die Browser- / Speicherauslastung um mehr als ein Gigabytea.length
ansteigt , aber Sie werden 1073741824 sehen. VMs speichern eindeutig einige "Arrays" unter Verwendung einer anderen Datenstruktur, ich vermute einfach eine Hashtabelle, zumindest wenn Sie sind ausreichend spärlich.Ruft den Wert für eine assoziative Array-Eigenschaft ab, wenn der Eigenschaftsname eine Ganzzahl ist:
Beginnend mit einem assoziativen Array, bei dem die Eigenschaftsnamen Ganzzahlen sind:
Elemente in das Array verschieben:
Durchlaufen Sie das Array und machen Sie etwas mit dem Eigenschaftswert.
Die Konsolenausgabe sollte folgendermaßen aussehen:
Wie Sie sehen können, können Sie die assoziative Array-Einschränkung umgehen und einen Eigenschaftsnamen als Ganzzahl festlegen.
HINWEIS: Das assoziative Array in meinem Beispiel ist der JSON-Inhalt, den Sie haben würden, wenn Sie ein Dictionary <string, string> [] -Objekt serialisieren würden.
quelle
Verwenden Sie ein Objekt - mit einer Ganzzahl als Schlüssel - anstelle eines Arrays.
quelle
Manchmal verwende ich Präfixe für meine Schlüssel. Beispielsweise:
Jetzt haben Sie kein Problem damit, auf sie zuzugreifen.
quelle