Gibt es eine Möglichkeit, eine generische for-Schleife zu erstellen, die entweder ein Array oder ein Objekt korrekt durchläuft? Ich weiß, dass ich die folgende for-Schleife schreiben kann, aber es wird auch andere Eigenschaften durchlaufen, die zu einem Array hinzugefügt werden würden.Javascript Generisch For Loop
for (item in x) {
console.log(item)
}
Damit meine ich eine for-Schleife, die iteriert wird:
x = [1, 2]
x.foo = "foo"
y = {first:1, second: 2}
x als
1
2
y als
first
second
Der Grund dafür ist, dass ich wird bis zur Laufzeit nicht wissen, welches x sein wird (entweder ein Array oder ein Objekt). Ist meine einzige Option, eine Funktion zu erstellen, die zur Laufzeit überprüft?
Wenn Sie nicht wissen, welche Art Sie es zu tun, sollten Sie versuchen, sich in einer Position, wo Sie die Art von wissen, das, was Sie zu tun haben. Es ist der einfachste Weg, Totschlag von Kollegen zu verhindern. –
Ich stimme definitiv mit Ihrem Kommentar überein. Klarheit ist immer zu wünschen. Der Grund für die Mehrdeutigkeit ist, dass ich einen Compiler für eine dynamische Sprache schreibe, die in Javascript kompiliert wird. Daher kenne ich nicht unbedingt den Typ der Quelle der Schleife, also brauchte ich eine generische Methode zum Erstellen einer for-Schleife, die zur Laufzeit funktionieren würde. – cbillingham
In JS ist alles ein Objekt. In Ihrem Fall ist es vielleicht sinnvoller, Arrays zu behandeln und sogar als Objekte zu arbeiten, da es keinen wirklichen Unterschied gibt. In Ihrem Beispiel über 'x = [1, 2]; x.foo = "foo"; 'Object.keys (x) listet dir' ["0", "1", "foo"] 'auf, aber er zeigt dir nicht die Eigenschaft' length', die nicht aufzählbar ist. In einigen Fällen können Sie 'Object.getOwnPropertyNames (x);' verwenden und dies wird alle eigenen Eigenschaften zurückgeben, unabhängig davon, ob sie aufzählbar sind oder nicht wie '[" 0 "," 1 "," length "," foo "]' ' – Redu