Zugriff auf Key/Index in assoziativen Arrays
busy_one
- javascript
Wie erhalte ich den Key eines Elementes eines assoziativen Arrays?
Bsp: myArr["foo"] = "bar";
Wie komme ich an "foo"?
Wie erhalte ich den Key eines Elementes eines assoziativen Arrays?
Es gibt keine in JS, das was du hier verwendest ist ein simples Objekt.
Bsp: myArr["foo"] = "bar";
Wie komme ich an "foo"?
Du suchst vermutlich eine for in Schleife.
Struppi.
Nein, ich möchte wissen, ob es eine Möglichkeit gibt, auf den Index zuzugreifen.
Und for-in für assoziative arrays stehen hier:
http://de.selfhtml.org/javascript/objekte/array.htm#assoziative\_arrays
Du suchst vermutlich eine for in Schleife.
Struppi.
Nein, ich möchte wissen, ob es eine Möglichkeit gibt, auf den Index zuzugreifen.
Dann versteh ich nicht ws du willst.
Und for-in für assoziative arrays stehen hier:
http://de.selfhtml.org/javascript/objekte/array.htm#assoziative\_arrays
Hast du das auch gelesen?
Struppi.
Hi,
Nein, ich möchte wissen, ob es eine Möglichkeit gibt, auf den Index zuzugreifen.
klar doch: Schreibe in Object.prototype.keys eine Funktion, die Dir eine Liste aller Member des jeweiligen Objektes liefert. Nutze dazu eine for-in-Schleife.
Cheatah
Yepp, das ist es, was ich suchte - Dank Dir! Rhino-Time again...
klar doch: Schreibe in Object.prototype.keys eine Funktion, die Dir eine Liste aller Member des jeweiligen Objektes liefert.
Yepp, das ist es, was ich suchte - Dank Dir! Rhino-Time again...
Yepp, genau das was ich dir am Anfang schon sagte.
Struppi.
Hallo,
klar doch: Schreibe in Object.prototype.keys eine Funktion, die Dir eine Liste aller Member des jeweiligen Objektes liefert. Nutze dazu eine for-in-Schleife.
Object.prototype is evil! Noch viel mehr evil als eval. Don't give a gun in the hand of a child!
Mathias
[latex]Moin![/latex]
Wie erhalte ich den Key eines Elementes eines assoziativen Arrays?
Bsp: myArr["foo"] = "bar";
Wie komme ich an "foo"?
Assoziative Arrays kennt JS nicht wirklich (sind Objekte) und haben einige Fallstricke siehe Selfhtml - Assoziative Arrays.
Günstiger wäre ein Datenobjekt:
var obj = {
foo: "bar",
bla: "fasel"
}
Dann kannst du über eine for in Schleife diese Werte auslesen.
for (c in obj) {
alert(c) // foo bla
alert(obj[c]) // bar, fasel
}
dirket ansprechen mit:
alert(obj.foo)
oder
alert(obj["foo"])
.
Cü,
Kai
Danke, aber ich suche wirklich nur eine Mögl. auf den Index-Wert zuzugreifen - es muss doch irgendwo eine Referenz darauf geben.
Danke, aber ich suche wirklich nur eine Mögl. auf den Index-Wert zuzugreifen - es muss doch irgendwo eine Referenz darauf geben.
Es gibt keinen Index Wert!
Was meinst du überhaupt damit? Den nummerischen Wert wie bei einem Array?
Das es keine assozitaiven Arrays in JS gibt, gibt es auch keinen derartigen Wert. Du hast lediglich ein stinknormales Objekt und kannst dessen Attribute mit for in auslesen. Sonst nichts.
Struppi.
Yerf!
Danke, aber ich suche wirklich nur eine Mögl. auf den Index-Wert zuzugreifen - es muss doch irgendwo eine Referenz darauf geben.
Du hast da einen Denkfehler: der Index ist die Referenz.
Wenn du zu einem bestimmten Wert den Index suchst musst du mittels Schleife alle Indizes durchlaufen und alle Vorkommen (es kann ja mehrere geben) dir merken.
Gruß,
Harlequin
Danke - ich ging davon aus, dass es auch darauf eine Referenz gibt. ...old habits die hard...
Du hast da einen Denkfehler: der Index ist die Referenz.
Yerf!
Danke - ich ging davon aus, dass es auch darauf eine Referenz gibt. ...old habits die hard...
Echte assoziative Arrays bieten teilweise einen fertigen Mechanismus für die Suche. Aber in JS ist es eben doch *nur* ein Objekt, das dynamisch um Member erweitert wird...
Gruß,
Harlequin
Hi,
...old habits die hard...
Du hast da einen Denkfehler: der Index ist die Referenz.
komisch, denn die oldesten habits, die Du bezüglich der Lese- und somit Schreibrichtung haben müsstest, ist die in Mitteleuropa übliche: Von oben nach unten, nicht von der Mitte nach unten und anschließend von oben irgendwo anders hin. Zitiere also bitte sinnvoll, danke.
Cheatah
Wenn du zu einem bestimmten Wert den Index suchst musst du mittels Schleife alle Indizes durchlaufen und alle Vorkommen (es kann ja mehrere geben) dir merken.
Von welchem Index sprecht ihr eigentlich die ganze Zeit?
Struppi.
Wenn du zu einem bestimmten Wert den Index suchst musst du mittels Schleife alle Indizes durchlaufen und alle Vorkommen (es kann ja mehrere geben) dir merken.
Von welchem Index sprecht ihr eigentlich die ganze Zeit?
Kann mir diese Frage keiner beantworten?
Struppi.
Yerf!
Wenn du zu einem bestimmten Wert den Index suchst musst du mittels Schleife alle Indizes durchlaufen und alle Vorkommen (es kann ja mehrere geben) dir merken.
Von welchem Index sprecht ihr eigentlich die ganze Zeit?
Von denjenigem, über den man die Member eines Objektes anspricht (ich kann drüber iterieren, also ist's ein Index ;-)
Kann mir diese Frage keiner beantworten?
Wird mühselig... fragst du die Leute eigentlich auch, welches Gaspedal sie meinen, wenn sie über ihr Elektroauto reden?
Gruß,
Harlequin
Grundlage für Zitat #911.
Yerf!
Wenn du zu einem bestimmten Wert den Index suchst musst du mittels Schleife alle Indizes durchlaufen und alle Vorkommen (es kann ja mehrere geben) dir merken.
Von welchem Index sprecht ihr eigentlich die ganze Zeit?
Von denjenigem, über den man die Member eines Objektes anspricht (ich kann drüber iterieren, also ist's ein Index ;-)
Also wir reden über die Attribute eines Objektes, das hat doch nichts mit einem Index zu tun (vermutlich hat das der OP gedacht, weil in JS der Indexoperator zum Zugriff auf die Attribute verwendet werden kann). Und das man darüber iterieren kann, war genau das was ich ihm bereits von anfang gesagt hatte.
Kann mir diese Frage keiner beantworten?
Wird mühselig... fragst du die Leute eigentlich auch, welches Gaspedal sie meinen, wenn sie über ihr Elektroauto reden?
Nein, ich frag danach warum ihr die ganze Zeit vom einem Benzintank sprecht.
Ich bin nur etwas genervt, weil ich von Anfang dem OP gesagt habe was er braucht, aber stattdessen auf falschen Begrifflichkeiten rumreitet, um mir zu erzählen das ich nicht Recht habe. (und mir dann einen Link zeigt, wo genau das steht, was ich ihm bereits gesagt habe)
Deshalb hat es micht interessiert was es mit diesen Begriff auf sich hat. Es hätte ja auch sein können, das der OP tatsächlich den Index meint, also einen nummerischen Wert der einer Art Reihenfolge entspricht, sowas liesse sich implementieren, aber halt nicht mit einem simplen Objekt.
Struppi.
Yerf!
Ich bin nur etwas genervt, weil ich von Anfang dem OP gesagt habe was er braucht, aber stattdessen auf falschen Begrifflichkeiten rumreitet, um mir zu erzählen das ich nicht Recht habe. (und mir dann einen Link zeigt, wo genau das steht, was ich ihm bereits gesagt habe)
Was dem OP an der Stelle gefehlt hat war der Hinweis, dass dies die *einzige* Möglichkeit ist, sein Vorhaben zu realisieren. Er hatte wohl gehofft, dass es bereits einen direkten Weg fertig innerhalb der Sprache gibt.
Gruß,
Harlequin
Was dem OP an der Stelle gefehlt hat war der Hinweis, dass dies die *einzige* Möglichkeit ist, sein Vorhaben zu realisieren. Er hatte wohl gehofft, dass es bereits einen direkten Weg fertig innerhalb der Sprache gibt.
Auf die Eigenschaft zu zugreifen?
Ja natürlich gibt es da einen direkten Weg: objekt.eigenschaft
Struppi.
Yerf!
Auf die Eigenschaft zu zugreifen?
Ja natürlich gibt es da einen direkten Weg: objekt.eigenschaft
Und genau das ist der Punkt an dem du den OP scheinbar immernoch falsch verstehst. Er will nicht auf eine Eigenschaft zugreifen sondern den Name der Eigenschaft (vom OP halt Index genannt) ermitteln in welcher ein vorher bekannter Wert steht.
In manchen Programmiersprachen mit assoziativen Arrays gibts dafür fertige Methoden, in JS muss man eben per Schleife alle Eigenschaften durchlaufen und nach dem Wert suchen.
Gruß,
Harlequin
Auf die Eigenschaft zu zugreifen?
Ja natürlich gibt es da einen direkten Weg: objekt.eigenschaftUnd genau das ist der Punkt an dem du den OP scheinbar immernoch falsch verstehst. Er will nicht auf eine Eigenschaft zugreifen sondern den Name der Eigenschaft (vom OP halt Index genannt) ermitteln in welcher ein vorher bekannter Wert steht.
Jetzt wird es klar, ich habe es tasächlich nicht verstanden.
In manchen Programmiersprachen mit assoziativen Arrays gibts dafür fertige Methoden, in JS muss man eben per Schleife alle Eigenschaften durchlaufen und nach dem Wert suchen.
Eben - obwohl ich es nicht verstanden hatte, habe ich ja genau das versucht ihm klar zu machen (Es gibt keine assoziativen Arrays in JS und er kann diese nur über for in ermitteln).
Damit der Thread noch einen sinnvollen Abschluss bekommt:
Object.prototype.key = function(val) {
for(var a in this) if(val === this[a]) return a;
return null;
};
Struppi.
Hallo,
Damit der Thread noch einen sinnvollen Abschluss bekommt:
Object.prototype.key = function(val) {
for(var a in this) if(val === this[a]) return a;
return null;
};
Nein! Nein! Und nochmal nein! ;)
»Object.prototype is verboten«, zumindest solange, wie man garantieren kann, dass JEDE for-in-Schleife mit hasOwnProperty arbeitet.
Dass hier noch nichtmal die hinzugefügte Methode mit hasOwnProperty arbeitet, bedeutet, dass man diese Garantie eben nicht hat. ;)
Wenn man Objects solche Methoden hinzufügen will, dann sollte man einen Object-Wrapper benutzen, wie ihn Prototype mit [Hash](http://prototypejs.org/api/hash) einführt.
Mathias
--
[SELFHTML aktuell Weblog](http://aktuell.de.selfhtml.org/weblog/)