Iterieren über ein Objekt in javascript mit einem unsortierten index

Ich bin erstellen einer Wiedergabeliste system, wo jeder song hat eine eindeutige ID. Wenn Sie hinzufügen einen song auf die playlist-array, dessen index registriert ist als ID.

Normalerweise beim Schleifen über ein javascript-array, greifen die Länge und zählen Sie durch den index. Gibt es eine Möglichkeit, eine Schleife über ein array mit nicht verwendete Indizes? Ist das schlimm Praxis Gründen?

  • Alle javascript-arrays sind assoziativ, Sie brauchen nicht zu verwenden, eine count-up index.
  • Unsinn. Javascript Arrays haben sequenziellen, numerischen Indizes. Vielleicht sind Sie unter Bezugnahme auf allgemeinere Objekte. Ein Häufig vorkommender Fehler.
  • Gibt es wirklich keine solche Sache wie ein Array oder ein Assoziatives Array. Alle Objekte sind nahezu hashtables. das Array-Objekt in Javascript hat nur ein paar Methoden zu handeln, wie ein array auf der Außenseite.
  • Ein schlecht formulierter Kommentar meinerseits. Sollte ich beschrieben habe-arrays in Bezug auf die Objekte, um meinen Standpunkt zu vermitteln. @TomalakGeret'kal - nur weil Sie referenziert werden können, die durch sequenziellen, numerischen Indizes bedeutet nicht, Sie tatsächlich haben sequenziellen, numerischen Indizes.
  • Betrachten Sie dieses: var a = new Array(); a[10] = 1; Was ist die Länge?
  • Bist du mit einem array als ein Objekt, und sich auf die Umsetzung details. Die Länge ist offiziell 0 es. Wieder, it ist ein allgemeiner Fehler. Der richtige code ist var a = []; a.push(1); und dieses neue element hat index 0.
  • Wieder falsch. You fallen sind, in eine gemeinsame Falle.
  • Tut mir Leid @TomalakGeret'kal, aber wir sehen auf gegenüberliegenden Seiten dieser Ausgabe. Wenn Javascript-Arrays waren richtige arrays in der traditionellen Programmierung Sinn, dann wäre ich nicht in der Lage-index in Sie mit nicht-ganzzahlige Indizes. Coding style ist kein Ersatz für die Codierung von Beschränkungen.
  • Wenn Sie "Elemente" auf einer Array Objekt-Instanz ohne Verwendung von .push Sie sind lediglich Eigenschaften des zugrunde liegenden Objekts. Sie sind nicht mit den Array API .push so Eigenschaften wie length funktionieren nicht richtig. Sie sind Hacker, die auf der Funktionalität. Es ist kein syntax-Fehler, aber es ist nicht was Sie tun sollen; numerisch indizierte Arrays sind dünner Wrapper über die Allgemeine Objects, also Javascript ermöglicht es Ihnen, die ist, warum so viele Menschen missverstehen, Javascript-arrays. Lesen die Q&A ich stehen Ihnen für weitere Informationen und Beispiele.
  • Tatsächlich, die Länge wird aktualisiert werden, um 11, und die Indizes, die Sie nicht gesetzt haben Werte, für die undefined zurück. Wenn Sie untersuchen Sie den Prototyp einer, wie ich Sie oben definiert, ist es mit dem array-Prototyp, und indem Sie einen Wert auf der 11-index, nicht willkürlich hinzufügen einer Eigenschaft in das Objekt. Es ist nicht einen Unterschied zwischen dem, wie ich das array erstellt haben und wie Sie das array erstellt haben. Die Quintessenz ist, dass wir bei einem Objekt entweder Weg. Array gerade passiert zu haben, ein paar nette Funktionen in den Prototypen, die es "sehen" wie ein array.
  • Das ist nicht spezifiziert Verhalten. Javascript nicht [] überladen, so dass es keine Möglichkeit gibt, dass die Festlegung einer Objekt-Eigenschaft diese Weise können automatisch ändern Sie den Wert für eine separate. Ihre definition von "array" ist falsch. Wenn Sie möchten, um vollständig zu ignorieren, die Ressourcen, die ich verlinkt hast Sie zu, dann kann ich nicht kontrollieren, aber bitte nicht verbreiten diese Fehlinformation-zu-Sprache-Neulinge. Guten Tag.
  • Wenn du dir den link, den Sie angegeben und auf den angegebenen link in die Antwort, landest du hier: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... werfen Sie einen Blick auf die Rubrik "Beziehung zwischen Länge und numerischen Eigenschaften". Es scheint ziemlich klar spezifizierte Verhalten.
  • Auch möchte ich darauf hinweisen, dass, unabhängig davon, ob Javascript die Methode überladen, dies ist absolut möglich. Und es geschieht mit Hilfe der Methoden in den Object-Prototyp. Nochmal, der link, den Sie führen mir auch erklärt, die Implementierung des array, und wie es tut genau das, was Sie mir gerade gesagt, Sie kann es nicht. Warum verbreiten diese "Fehlinformationen", wie Sie es ausdrückte, um zu jedermann?
  • Scheint es gibt einen Zusammenhang zwischen .length und [], so war ich falsch. Aber mein Ausgangspunkt, dass Arrays haben sequenziellen, numerischen Indizes steht. In der Tat, dass .length automatisch erhöht, um "fit" - eine neue, höhere integer-Schlüssel geht nur zu zeigen, dass noch weiterer.
  • Lassen Sie mich bitte wissen, wenn es etwas gibt, dass Sie nicht mit hier.
  • Im Nachhinein, wollte ich darauf hinweisen, dass diese Debatte war für mich sehr hilfreich. Ich lernte eine Menge über Javascript, die ich nicht schon kenne. Vielen Dank für die "Betankung das Feuer" ein bisschen.
  • Jonathan ist richtig hier, nur fehlen ein paar details und vielleicht ein ecma-international.org/publications/files/ECMA-ST-ARCH/... link zu den ECMA-standard. Seite 88 ist der wichtige Teil. Javascript-arrays sind Objekte, die Behandlung von Eigenschaften [0..2^32] speziell, und unterhält eine Eigenschaft namens length. Bei der Zuweisung zu einem array über eine Besondere Eigenschaft, es wird Inkrement-Länge entsprechend. Komplett standard und implementiert werden, das gleiche über alle JS-engines. Alles Ist Ein Objekt (UVP), Objekte sind Karten

InformationsquelleAutor c.. | 2011-09-24
Schreibe einen Kommentar