Die Verwendung einer Ganzzahl als Schlüssel in einem assoziativen Array in JavaScript
Wenn ich ein neues JavaScript-Array erstelle und eine ganze Zahl als Schlüssel verwende, wird jedes Element dieses Arrays bis zu dieser Zahl als undefined erstellt.
Zum Beispiel:
var test = new Array();
test[2300] = 'Some string';
console.log(test);
wird 2298 Undefined-Werte und einen 'Some string' ausgeben.
Wie sollte ich JavaScript dazu bringen, 2300 als Zeichenkette anstelle einer Ganzzahl zu verwenden, oder wie sollte ich verhindern, dass es 2299 leere Indizes erstellt?
Antwort #1
Verwenden Sie ein Objekt, wie die Leute sagen. Beachten Sie jedoch, dass Sie keine ganzzahligen Schlüssel haben können. JavaScript wird die ganze Zahl in einen String umwandeln. Das Folgende gibt 20 aus, nicht undefined:
var test = {}
test[2300] = 20;
console.log(test["2300"]);Antwort #2
Du kannst einfach ein Objekt verwenden:
var test = {}
test[2300] = 'Some string';
Antwort #3
Wie die Leute sagen, wird JavaScript eine Zahl in einen String umwandeln, daher ist es nicht möglich, sie direkt auf ein assoziatives Array anzuwenden, aber Objekte werden meiner Meinung nach auf ähnliche Weise für dich funktionieren.
Sie können Ihr Objekt erstellen:
var object = {};
Und die Werte als Array hinzufügen funktioniert:
object[1] = value;
object[2] = value;
Das wird Ihnen geben:
{
'1': value,
'2': value
}
Danach können Sie darauf wie auf ein Array in anderen Sprachen zugreifen, indem Sie den Schlüssel abrufen:
for(key in object)
{
value = object[key] ;
}
Antwort #4
Wenn der Anwendungsfall das Speichern von Daten in einer Sammlung ist, stellt ECMAScript 6 den Map-Typ zur Verfügung.
Es ist nur schwerer zu initialisieren.
Hier ist ein Beispiel:
const map = new Map();
map.set(1, "One");
map.set(2, "Two");
map.set(3, "Three");
console.log("=== With Map ===");
for (const [key, value] of map) {
console.log(`${key}: ${value} (${typeof(key)})`);
}
console.log("=== With Object ===");
const fakeMap = {
1: "One",
2: "Two",
3: "Three"
};
for (const key in fakeMap) {
console.log(`${key}: ${fakeMap[key]} (${typeof(key)})`);
}
Ergebnis :
=== With Map ===
1: One (number)
2: Two (number)
3: Three (number)
=== With Object ===
1: One (string)
2: Two (string)
3: Three (string)
Antwort #5
Andere Antworten zusammenstellen:
Objekt
var test = {};
Wenn man eine Zahl als Schlüssel einer neuen Eigenschaft verwendet, wird die Zahl in eine Zeichenkette umgewandelt:
test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'
Beim Zugriff auf den Wert der Eigenschaft unter Verwendung derselben Zahl wird die Zahl wieder in eine Zeichenkette umgewandelt:
console.log(test[2300]);
// Output: 'Some string'
Wenn man jedoch die Schlüssel des Objekts abruft, werden sie nicht wieder in Zahlen zurückverwandelt:
for (var key in test) {
console.log(typeof key);
}
// Output: 'string'
Karte
ECMAScript 6 erlaubt die Verwendung des Map-Objekts (Dokumentation, ein Vergleich mit Object). Wenn Ihr Code lokal ausgeführt werden soll oder die ECMAScript 6-Kompatibilitätstabelle für Ihre Zwecke ausreichend grün aussieht, ziehen Sie in Betracht, eine Map zu verwenden:
var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'
Es wird keine Typumwandlung durchgeführt, zum Guten wie zum Schlechten:
console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: 'Some string'
