Frage

Gibt es einen Unterschied zwischen:

 var samples = {
        "TB10152254-001": {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        },
        "TB10152254-002": {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        },

        "TB10152254-003": {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        }
    };

und

 var samples = new Array();
samples["TB10152254-001"]  = {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"};

samples["TB10152254-002"] = {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

samples["TB10152254-003"] =  {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

EDIT:

Ich werde die Frage wieder Satz: Wie fülle ich den Hash dynamisch? Ich kann so etwas wie samples.TB10152254-003 nicht tun, weil ich TB10152254-003 dynamisch ist ... so ist das überhaupt möglich?

War es hilfreich?

Lösung

Beide werden arbeiten, weil ein Array eine Art von Objekt ist. Aber es gibt keinen Vorteil ein Array auf diese Weise zu verwenden, und kann leicht Probleme geben, wenn Sie Iterierte über die Eigenschaften eines for/in verwendet wird.

Das Objekt wäre der richtige Typ für benannte Eigenschaften zu verwenden. Reservieren Sie Ihre Verwendung von Array für Indexeigenschaften nur.


Im Hinblick auf Ihre bearbeiten, können Sie dynamisch das Objekt die gleiche Weise wie das Array füllen, eckige Klammer-Notation.

   // Create a new empty object. You an use "new Object()" if you wish
var samples = {};

  // Populate the "samples" object in the same way you would an Array.
samples["TB10152254-001"]  = {
            folderno: "TB10152254",
            ordno: "001",
            startfootage: "",
            endfootage: "",
            tagout: "Y"};

samples["TB10152254-002"] = {
            folderno: "TB10152254",
            ordno: "002",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

samples["TB10152254-003"] =  {
            folderno: "TB10152254",
            ordno: "003",
            startfootage: "",
            endfootage: "",
            tagout: "Y"
        };

Andere Tipps

Ja. Im zweiten Beispiel Beispiel Sie „missbrauchen“ die Tatsache, dass ein Array als auch eine Object. Tun Sie dies nicht tun.

Mit Arrays für numerische indizierte Werte nur und schlicht Objects für irgendwie Hash-Tabellen.

Ich schlage vor, mehr über Arrays und Objects .

In JavaScript ist im Grunde alles, was ein Objekt. Auch Arrays. Aber das Array Objekt bietet zusätzliche Methoden zur numerischen indizierten Daten zu tun.

Sie können sich wahrscheinlich den Unterschied am besten, wenn Sie samples.length im zweiten Beispiel zu tun. Ein einfaches Objekt keine Eigenschaft length hat, hat ein Array. Für ein Array, es sagt Ihnen, die Anzahl der Elemente in dem Array gespeichert. Nun, wenn Sie samples.length im zweiten Beispiel nennen, erhalten Sie 0, da das Array eigentlich kein Element hält.

Was kann man mehr verwirrend ist die Tatsache führen könnte, dass Sie zwei Möglichkeiten für den Zugriff Objekteigenschaften haben: Die „Punktnotation“, object.property und die „Array-Notation“, object['property']. Aber das ist eine Funktionalität von Objekten nicht von Arrays.

Die Array-Notation ist praktisch, wenn Sie die Schlüssel erzeugen oder die Eigenschaftsnamen in einer Variablen gespeichert haben.

Update:

Wie schon geschrieben, können Sie die Verwendung der Array-Notation machen Eigenschaften dynamisch zu erstellen, z.

var samples = {};

for(var i = 0; i < 4; i++) {
    samples["TB10152254-" + i] = {
        folderno: "TB10152254",
        ordno: i,
        startfootage: "",
        endfootage: "",
        tagout: "Y"
    }
}

Wenn Sie die Eigenschaften zugreifen möchten, müssen Sie die for...in Schleife der Schlüssel zu iterieren:

for(var key in samples) {
    var value = samples[key];
}

Aber Achtung: je Nie for...in Schleife über ein Array verwenden. Auf der Seite verlinkt ich, warum auch geschrieben wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top