Sie erstellen ein Array, verwenden es dann aber als Karte. Es sieht so aus, als wollten Sie stattdessen ein einfaches Objekt.
– Jon
14. September 2013 um 17:43 Uhr
Es gibt keine Dinge wie associative arrays in JS: es ist entweder ein einfaches Array oder ein Objekt. Nichts hindert das Hinzufügen nicht numerischer Eigenschaften zu Arrayaber das macht es nicht associative – im Speziellen, length Eigenschaft zählt diese Eigenschaften nicht automatisch.
– raina77ow
14. September 2013 um 17:44 Uhr
re: Es gibt keine assoziativen Arrays in JS. — anders formuliert: JavaScript verwendet den Namen “Objekt” anstelle des Namens “assoziatives Array”. Aber es hat keine “.length”-Eigenschaft.
– Jesse Chisholm
16. Juni 2014 um 20:42 Uhr
Spitz
Das .length property verfolgt nur Eigenschaften mit numerischen Indizes (Schlüsseln). Sie verwenden Zeichenfolgen für Schlüssel.
Du kannst das:
var arr_jq_TabContents = {}; // no need for an array
arr_jq_TabContents["Main"] = jq_TabContents_Main;
arr_jq_TabContents["Guide"] = jq_TabContents_Guide;
arr_jq_TabContents["Articles"] = jq_TabContents_Articles;
arr_jq_TabContents["Forum"] = jq_TabContents_Forum;
for (var key in arr_jq_TabContents) {
console.log(arr_jq_TabContents[key]);
}
Sicherheitshalber ist es eine gute Idee, in solchen Schleifen sicherzustellen, dass keine der Eigenschaften unerwartete Ergebnisse der Vererbung sind:
for (var key in arr_jq_TabContents) {
if (arr_jq_TabContents.hasOwnProperty(key))
console.log(arr_jq_TabContents[key]);
}
bearbeiten – Es ist wahrscheinlich eine gute Idee, jetzt zu bemerken, dass die Object.keys() Funktion ist in modernen Browsern und in Node usw. verfügbar. Diese Funktion gibt die “eigenen” Schlüssel eines Objekts als Array zurück:
Die Callback-Funktion, an die übergeben wird .forEach() wird mit jedem Schlüssel aufgerufen und der Index des Schlüssels im Array wird von zurückgegeben Object.keys(). Es wird auch das Array übergeben, durch das die Funktion iteriert, aber dieses Array ist für uns nicht wirklich nützlich; Wir brauchen das Original Objekt. Darauf kann direkt über den Namen zugegriffen werden, aber (meiner Meinung nach) ist es etwas schöner, es explizit zu übergeben, was durch die Übergabe eines zweiten Arguments an erreicht wird .forEach() — das ursprüngliche Objekt — das als gebunden wird this innerhalb des Rückrufs. (Ich habe gerade gesehen, dass dies in einem Kommentar unten vermerkt wurde.)
Was ist das var arr_jq_TabContents = {};? Ich meine {}
– Szymon Toda
14. September 2013 um 17:49 Uhr
@Ultra ist ein leeres Objektliteral. Es bedeutet lediglich, dass die Variable mit einem Verweis auf ein neues leeres Objekt initialisiert wird.
– Spitze
14. September 2013 um 17:50 Uhr
@Ultra Sie benötigen keine Array-Instanz, da Sie sie in diesem Code nicht wie ein JavaScript-Array verwenden. JavaScript hat keine “assoziativen Arrays” wie einige andere Sprachen.
– Spitze
14. September 2013 um 17:51 Uhr
Was ist der Unterschied zwischen zuweisen [] und {}? Nur die verschiedenen Prototypen?
– Vinczemarton
10. März 2014 um 15:34 Uhr
Anstelle von hasOwnProperty sollte es in allen modernen Webbrowsern möglich sein, über die Schlüssel eines Objekts zu iterieren mit: Object.keys(arr_jq_TabContents).forEach( function(key) { ... } );
– Gregor Bell
24. März 2014 um 21:13 Uhr
Tika
Dies ist ein sehr einfacher Ansatz. Das Vorteil können Sie auch Schlüssel bekommen:
for (var key in array) {
var value = array[key];
console.log(key, value);
}
Für ES6:
array.forEach(value => {
console.log(value)
})
Für ES6 (wenn Sie den Wert, den Index und das Array selbst möchten):
Nicht verwenden var in Schleifen, die auf einen Geltungsbereich hindeuten, der nicht existiert. Verwenden var vor der Schleife bzw let in der Schleife.
– Ceving
8. Dezember 2015 um 9:38 Uhr
@ceving, können Sie mehr darüber erklären, warum Sie var nicht in Schleifen verwenden? Ich komme aus dem C++/PHP-Hintergrund und verstehe das nicht. Scoping ist in der Schleife vorhanden, aber vorübergehend, daher bin ich mir nicht sicher, was Sie meinen.
– Denis
21. Juli 2016 um 21:33 Uhr
@Dennis In den meisten Sprachen ist eine Variablendeklaration in a for -Schleife generiert einen Bereich, der auf den Hauptteil der beschränkt ist for Schleife. Aber in JavaScript eine Variable deklariert von var ist immer funktionsglobal, auch wenn Sie es in a schreiben for Schleife. Siehe hier: davidwalsh.name/for-and-against-let
– Ceving
5. August 2016 um 19:22 Uhr
nicht Memory Leaks per se, aber definitiv “Memory Spills”. var in Javascript erstellt Variablen im Speicher, auch nachdem die Schleife abgeschlossen ist.
– ahnbizcad
19. September 2016 um 22:38 Uhr
Ich denke, der Punkt dieser Kommentare zur Verwendung von “var” besteht darin, “let” jetzt allgemein, aber speziell in einer Schleife zu verwenden. Die Gründe sind oben erläutert, aber zusammenfassend liegt es am Bereich, “var” erstellt einen globalen Bereich.
– DeeZone
17. November 2019 um 0:07 Uhr
Banyan
Wenn Node.js oder der Browser unterstützen Object.entries()kann es als Alternative zu using verwendet werden Object.keys() (Pointys Antwort).
Es gibt bereits einige einfache Beispiele, aber ich merke, wie Sie Ihre Frage formuliert haben, dass Sie wahrscheinlich einen PHP-Hintergrund haben und erwarten, dass JavaScript auf die gleiche Weise funktioniert – das tut es nicht. Ein PHP array unterscheidet sich sehr von einem JavaScript Array.
In PHP kann ein assoziatives Array das meiste leisten, was ein numerisch indiziertes Array kann (die array_* Funktionen funktionieren, können Sie count() es usw.). Sie erstellen einfach ein Array und beginnen mit der Zuweisung an String-Indizes anstelle von numerischen.
In JavaScript ist alles ein Objekt (mit Ausnahme von Primitives: String, Numeric, Boolean), und Arrays sind eine bestimmte Implementierung, mit der Sie numerische Indizes haben können. Alles, was in ein Array geschoben wird, wirkt sich auf dieses aus lengthund kann mit Array-Methoden (map, forEach, reduce, filter, findusw.) Da jedoch alles ein Objekt ist, können Sie jederzeit einfach Eigenschaften zuweisen, da Sie dies jedem Objekt tun können. Die Notation mit eckigen Klammern ist einfach eine andere Möglichkeit, auf eine Eigenschaft zuzugreifen, also in Ihrem Fall:
array['Main'] = 'Main Page';
ist eigentlich gleichbedeutend mit:
array.Main = 'Main Page';
Aus Ihrer Beschreibung geht hervor, dass Sie ein “assoziatives Array” wünschen, aber für JavaScript ist dies ein einfacher Fall der Verwendung eines Objekts als Hashmap. Ich weiß auch, dass es sich um ein Beispiel handelt, aber vermeiden Sie bedeutungslose Namen, die nur den Variablentyp beschreiben (z array) und einen Namen, der darauf basiert, was er enthalten soll (z pages). Einfache Objekte haben nicht viele gute direkte Möglichkeiten zum Iterieren, daher werden wir sie oft zuerst in Arrays umwandeln Object Methoden (Object.keys in diesem Fall – gibt es auch entries und values wird gerade einigen Browsern hinzugefügt), die wir wiederholen können.
Dies ist in den meisten Fällen (im Wesentlichen) falsch:
var array = [];
array["Main"] = "Main page";
Dadurch wird eine Nicht-Element-Eigenschaft für das Array mit dem Namen erstellt Main. Obwohl Arrays Objekte sind, möchten Sie normalerweise keine Nicht-Element-Eigenschaften für sie erstellen.
Wenn Sie indizieren möchten array Bei diesen Namen würden Sie normalerweise a verwenden Map oder ein einfaches Objekt, kein Array.
Mit einer Map (ES2015+), die ich nennen werde map weil ich kreativ bin:
let map = new Map();
map.set("Main", "Main page");
Sie iterieren es dann mit den Iteratoren von its values, keysoder entries Methoden, zum Beispiel:
for (const value of map.values()) {
// Here, `value` will be `"Main page"`, etc.
}
Verwenden eines einfachen Objekts, das ich kreativ nennen werde obj:
let obj = Object.create(null); // Creates an object with no prototype
obj.Main = "Main page"; // Or: `obj["Main"] = "Main page";`
Sie würden dann seinen Inhalt mit iterieren Object.keys, Object.valuesoder Object.entrieszum Beispiel:
for (const value of Object.values(proches_X)) {
// Here, `value` will be `"Main page"`, etc.
}
12995800cookie-checkJavaScript-Foreach-Schleife für ein assoziatives Array-Objektyes
Sie erstellen ein Array, verwenden es dann aber als Karte. Es sieht so aus, als wollten Sie stattdessen ein einfaches Objekt.
– Jon
14. September 2013 um 17:43 Uhr
Es gibt keine Dinge wie
associative arrays
in JS: es ist entweder ein einfaches Array oder ein Objekt. Nichts hindert das Hinzufügen nicht numerischer Eigenschaften zuArray
aber das macht es nichtassociative
– im Speziellen,length
Eigenschaft zählt diese Eigenschaften nicht automatisch.– raina77ow
14. September 2013 um 17:44 Uhr
re: Es gibt keine assoziativen Arrays in JS. — anders formuliert: JavaScript verwendet den Namen “Objekt” anstelle des Namens “assoziatives Array”. Aber es hat keine “.length”-Eigenschaft.
– Jesse Chisholm
16. Juni 2014 um 20:42 Uhr