Domanda

C'è una differenza tra:

 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"
        }
    };

E

 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:

I si ri-formulare la domanda: Come faccio io popolo l'hash in modo dinamico? Non riesco a fare qualcosa di simile samples.TB10152254-003 perché ho TB10152254-003 è dinamico ... così, è che anche possibile?

È stato utile?

Soluzione

Sia funzionerà perché una matrice è un tipo di oggetto. Ma non c'è alcun vantaggio di utilizzare una matrice in questo modo, e può facilmente dare problemi quando si un'iterazione sulle proprietà con un for/in.

L'oggetto sarebbe il tipo corretto da utilizzare per le proprietà denominate. Prenotate il vostro uso di Array solo per proprietà dell'indice.


Per quanto riguarda la modifica, è possibile in modo dinamico popolare l'oggetto allo stesso modo come l'Array, utilizzando la notazione parentesi quadra.

   // 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"
        };

Altri suggerimenti

Sì. Nel secondo esempio esempio, si sta "abusando" il fatto che un Array come anche una Object. Non fare questo.

Utilizzare Arrays per i valori numerici indicizzati solo e Objects pianura per Kinda tabelle hash.

Suggerisco di leggere di più su Arrays e Objects .

In JavaScript, in fondo tutto è un oggetto. Anche matrici. Ma l'oggetto Array fornisce metodi addizionali per gestire dati indicizzata numerico.

probabilmente si può vedere la differenza il migliore quando si fa samples.length nel secondo esempio. Un oggetto pianura ha length struttura, una matrice fa. Per un array, ti dice il numero di elementi memorizzati nella matrice. Ora, quando si chiama samples.length nel secondo esempio, si otterrà 0 perché la matrice in realtà contiene alcun elemento.

Che cosa potrebbe portare a più confusione è il fatto, che ci sono due possibilità per accedere alle proprietà degli oggetti: la "notazione del punto", object.property e la "notazione di matrice", object['property']. Ma questa è una funzionalità di oggetti non di array.

La notazione di matrice è utile, quando generare le chiavi o che hanno il nome della proprietà memorizzato in una variabile.

Aggiornamento:

Come scritto, si può fare uso della notazione di matrice per creare le proprietà in modo dinamico, per esempio:.

var samples = {};

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

Se si desidera accedere alle proprietà, è necessario utilizzare il for...in ciclo per scorrere i tasti:

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

Ma nota: Mai e poi mai usare for...in per un ciclo su un array. Nella pagina ho collegato a è scritto anche il perché.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top