Wie erstelle ich einen dynamischen Schlüssel, der einer JavaScript-Objektvariablen hinzugefügt werden soll [duplicate]

Lesezeit: 4 Minuten

Wie erstelle ich einen dynamischen Schlussel der einer JavaScript Objektvariablen hinzugefugt
Ryan

Ich versuche so etwas, aber dieses Beispiel funktioniert nicht.

jsObj = {};

for (var i = 1; i <= 10; i++) {
    jsObj{'key' + i} = 'example ' + 1;
}

Was kann ich tun, um einen solchen dynamischen Schlüssel zu erstellen?

Wie erstelle ich einen dynamischen Schlussel der einer JavaScript Objektvariablen hinzugefugt
Spitz

Eckige Klammern:

jsObj['key' + i] = 'example' + 1;

In JavaScript sind alle Arrays Objekte, aber nicht alle Objekte sind Arrays. Der Hauptunterschied (und einer, der mit reinem JavaScript und einfachen Objekten ziemlich schwer nachzuahmen ist) besteht darin, dass Array-Instanzen die beibehalten length -Eigenschaft so, dass sie eins plus den numerischen Wert der Eigenschaft widerspiegelt, deren Name numerisch ist und deren Wert, wenn er in eine Zahl umgewandelt wird, der größte aller solcher Eigenschaften ist. Das klingt wirklich seltsam, aber es bedeutet nur, dass bei einer Array-Instanz die Eigenschaften mit Namen wie "0", "5", "207"usw. werden alle insofern besonders behandelt, als ihre Existenz den Wert von bestimmt length. Und obendrein der Wert von length kann sein einstellen zu Löschen solche Eigenschaften. Einstellung der length eines Arrays zu 0 entfernt effektiv alle Eigenschaften, deren Namen wie ganze Zahlen aussehen.

OK, das ist es also, was ein Array besonders macht. All das hat jedoch überhaupt nichts damit zu tun, wie JavaScript funktioniert [ ] Betreiber funktioniert. Dieser Operator ist ein Objekteigenschaften-Zugriffsmechanismus, der auf jedem Objekt funktioniert. In diesem Zusammenhang ist es wichtig zu beachten, dass numerische Array-Eigenschaftsnamen nichts Besonderes sind, was den einfachen Zugriff auf Eigenschaften angeht. Es sind nur Strings, die wie Zahlen aussehen, aber die Eigenschaftsnamen von JavaScript-Objekten können jede beliebige Art von String sein.

So ist die Art und Weise der [ ] Betreiber arbeitet in a for Schleife, die durch ein Array iteriert:

for (var i = 0; i < myArray.length; ++i) {
  var value = myArray[i]; // property access
  // ...
}

ist eigentlich nicht anders als der Weg [ ] funktioniert beim Zugriff auf eine Eigenschaft, deren Name eine berechnete Zeichenfolge ist:

var value = jsObj["key" + i];

Die [ ] Betreiber gibt es zu tun genau in beiden Fällen dasselbe. Dass es sich in einem Fall um ein Array handelt, ist also unerheblich.

Wann Einstellung Eigenschaftswerte verwenden [ ]die Geschichte ist die gleiche außer für das besondere Verhalten rund um die Aufrechterhaltung der length Eigentum. Wenn Sie eine Eigenschaft mit einem numerischen Schlüssel für eine Array-Instanz festlegen:

myArray[200] = 5;

dann (unter der Annahme, dass “200” der größte numerische Eigenschaftsname ist) die length Eigenschaft wird aktualisiert auf 201 als Nebeneffekt der Eigentumszuweisung. Wenn das Gleiche jedoch mit einem einfachen Objekt gemacht wird:

myObj[200] = 5;

Es gibt keine solche Nebenwirkung. Die Eigenschaft “200” sowohl des Arrays als auch des Objekts wird auf den Wert gesetzt 5 ansonsten genau so.

Man könnte meinen, dass deswegen length Verhalten ist irgendwie praktisch, Sie könnten es genauso gut machen alle objects Instanzen des Array-Konstruktors anstelle von einfachen Objekten. Daran ist nichts direkt falsch (obwohl es verwirrend sein kann, insbesondere für Leute, die mit einigen anderen Sprachen vertraut sind, wenn einige Eigenschaften in der enthalten sind length aber nicht andere). Wenn Sie jedoch mit JSON-Serialisierung arbeiten (eine ziemlich häufige Sache), verstehen Sie, dass Array-Instanzen auf eine Weise in JSON serialisiert werden nur beinhaltet die numerisch benannten Eigenschaften. Andere dem Array hinzugefügte Eigenschaften werden niemals im serialisierten JSON-Formular angezeigt. Also zum Beispiel:

var obj = [];
obj[0] = "hello world";
obj["something"] = 5000;

var objJSON = JSON.stringify(obj);

Der Wert von “objJSON” ist eine Zeichenfolge, die nur enthält ["hello world"]; die Eigenschaft “etwas” geht verloren.

ES2015:

Wenn Sie in der Lage sind, ES6-JavaScript-Funktionen zu verwenden, können Sie verwenden Berechnete Eigenschaftsnamen um dies ganz einfach zu handhaben:

var key = 'DYNAMIC_KEY',
    obj = {
        [key]: 'ES6!'
    };

console.log(obj);
// > { 'DYNAMIC_KEY': 'ES6!' }

  • wenn es in node js verwendet wird, weiß es nicht warum

    – ujwal dhakal

    24. November 2015 um 13:59 Uhr

  • @ujwaldhakal Ich verstehe diesen Kommentar nicht, sorry.

    – Spitze

    24. November 2015 um 13:59 Uhr

  • if(i == -1) { var key = “asd”; var val = data.gname; connect_clients.push({[key]:wert}); } Ich erhalte eine Fehlermeldung, wenn ich den node.js-Fehler in ({[key]) weiß nicht warum

    – ujwal dhakal

    24. November 2015 um 14:14 Uhr


  • @ujwaldhakal vielleicht solltest du eine neue Frage stellen, wenn du Schwierigkeiten hast.

    – Spitze

    24. November 2015 um 16:21 Uhr

  • Sehr klare und praktische Antworten. Ich habe seltsame undefinierte Werte von Index 0 bis 20 erhalten, als ich versuchte, einen neuen Wert bei Index 21 in einem neuen Array festzulegen. So verwirrt, dass ich mit dieser Antwort verstand, warum das Verhalten so kam, also beschloss ich, Objekt anstelle von Array zu verwenden.

    – Oluwatobi Samuel Omisakin

    7. September 2018 um 10:59 Uhr

Assoziative Arrays in JavaScript funktionieren nicht wirklich so wie in anderen Sprachen. for each -Anweisungen sind kompliziert (weil sie geerbte Prototypeigenschaften aufzählen). Sie könnten Eigenschaften für ein Objekt/assoziatives Array deklarieren, wie von Pointy erwähnt, aber für solche Dinge sollten Sie wirklich ein Array mit dem verwenden push Methode:

jsArr = []; 

for (var i = 1; i <= 10; i++) { 
    jsArr.push('example ' + 1); 
} 

Vergessen Sie nur nicht, dass indizierte Arrays nullbasiert sind, sodass das erste Element jsArr ist[0]nicht jsArr[1].

915980cookie-checkWie erstelle ich einen dynamischen Schlüssel, der einer JavaScript-Objektvariablen hinzugefügt werden soll [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy