Wie man den index ein Objekt in ein array von Objekten?
Habe ich ein JavaScript-array von Objekten, wie diesem:
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
Diese Objekte generiert, die von den gleichen Konstruktor und Hinzugefügt, um das array in einer Schleife. Die Objekte haben Methoden, die in der Prototyp-die müssen wissen, das Objekt index in das array zu tun, Ihre Sachen. Derzeit, was ich Tue, ist, um eine Immobilie genannt id
im inneren jedes Objekt, wenn ich es innerhalb der Schleife gleich der array-index. So etwas wie dieses:
box[i].id = i;
Aber ich bin nicht ganz zufrieden mit diesem, weil jedes mal, wenn ich die Reihenfolge der array mit sort()
ich habe zu laufen eine Schleife zum update der id
Eigenschaften mit dem neuen index-Werte.
Meine Frage ist, ob es einen Weg gibt, zu wissen, in einem Objekt seine index im array, ohne die id-Eigenschaft, hoffe Ihr könnt mir helfen.
Vielen Dank im Voraus.
- Ich denke, wenn die Objekt-Methoden kennen müssen, um den index Ihres Objekts, Sie gehören nicht in den Objekten. Sie gehören entweder in eine singleton-Instanz, oder auf das array.
- Siehe patrick ' s gute Antwort. Diese Art der Kopplung führt unweigerlich zu viel Ausfall; der Fall wies darauf hin, ist nur die "Spitze" des Problems. Vielleicht gibt es praktikable Lösung zu einem anderen (aber verwandten) Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass eine Funktion in einem Objekt in das Array gehen, um sich bewusst sein, der index des Arrays, die auf Sie verweisen.
Da jedes Element im Array ist einfaches zeigen auf das Objekt im Speicher, es könnte unter Umständen sein, Dutzende von Array-Elementen, Variablen -, Objekt-Eigenschaften, etc., die Referenz das gleiche Objekt, so wird die Funktion (oder das Objekt, das die Funktion enthält) wüsste nicht, was wieder Referenz, die Sie hoffen, zu stellen.
Ich vermute, Sie stecken werde tun, was Sie tun, wenn Sie brauchen, um zu wissen, seinen index im Array.
Ich nehme an, dass die Funktion nennen könnte
indexOf()
gegen das Array, da gibt es einenindex
, aber das würde erfordern einigen Aufwand für jeden Anruf, und Sie müssen Hinzugefügt es für nicht unterstützte Browser.Warum gehst du nicht fügen Sie eine einzigartige Eigenschaft, die auf jedes Objekt und verwenden Sie diese Eigenschaft, um lookup die indexOf-Objekt.
Wenn Sie über einen Konstruktor verfügen, können Sie eine _id und dann Suche, die id mit:
Dies funktioniert sogar, wenn Sie Sortieren Sie das array, aber Sie müssen halten Sie die id eindeutig ist.
Array.der Prototyp.map
ist nicht auf den IE7 oder IE8. ES5-Kompatibilitätbtw, ich weiß nicht, wie diese Lösung aber es funktioniert auf dein problem 🙂