Hallo Murphy
Nicht ganz. Soweit ich das sehe, funktioniert deine nicht, wenn das Array etwas anderes enthält als Strings oder Zahlen. [...]
Stimmt, das habe ich vergessen zu erwähnen. Trotzdem ist diese Lösung sinnvoll, wenn man, wie der OP, Strings oder Zahlen in dem Array stehen hat.
Außerdem finde ich, dass JavaScript hier einen Designfehler hat. Der String, in den ein Objekt zum Zwecke der Ausgabe oder Interpolation verwandelt wird, sollte standardmäßig irgendeinen einzigartigen Token, wie zum Beispiel die Speicheradresse des Objektes, enthalten.
Sprich ein Referenzscalar wie in Perl,oder?
Abgesehen davon, dass das zum Debuggen ausgesprochen sinnvoll ist, würde meine Lösung dann auch mit anderen Objekten funktionieren ;-)
Also für Funktionen lässt sich dein Algo noch ohne weiteres retten, da das toString() einer Funktion sein Body in Stringform ist. Man müsste nur noch zusätzlich statt true die Funktionsreferenz abspeichern und abtesten um sicherzugehen dass nicht unterschiedliche Funktionen das gleiche Body haben.
Bei anderen Objekten wirds schwierig, obj.toString() liefert nur sowas wie "[object Object]" und toSource() gibts leider nur im Mozilla.
Bliebe nur die Möglichkeit für dumme Objekte entweder eine lineare Liste anzulegen oder im Object selbst ein seen=true attribut zu setzen udn später wieder zu löschen.
Zum Glück taucht das Problem mit Nummern oder String-Objekten wiederum nicht auf weil toString den primitiven Wert zurückliefert.
Ciao
LanX