2011-01-18 4 views
1

Y at-il une différence entre:Javascript Object/population tableau question

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

ET

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:

je reformuler la question: Comment puis-je renseignez la hachage dynamiquement? Je ne peux pas faire quelque chose comme samples.TB10152254-003 parce que je TB10152254-003 est dynamique ... alors, est-ce encore possible?

Répondre

2

Les deux fonctionneront car un tableau est un type d'objet. Mais il n'y a aucun avantage à utiliser un tableau de cette façon, et peut facilement causer des problèmes lorsque vous parcourez les propriétés en utilisant un for/in.

L'objet serait le type approprié à utiliser pour les propriétés nommées. Réservez votre utilisation de Array pour les propriétés d'index uniquement. En ce qui concerne votre modification, vous pouvez remplir dynamiquement l'objet de la même manière que le tableau, en utilisant la notation entre crochets.

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

en fait, ils ne fonctionnent pas tous les deux. Je passe cela à la fonction ajax (Jquery ajax) et elle n'aime que la première. J'étais sous l'impression qu'ils sont équivalents .... (et oui je jasonifie avant de le transmettre). – sarsnake

+0

@gnomixa: Je veux dire qu'ils travaillent tous deux en termes de stockage réussi des valeurs par rapport aux propriétés nommées. Il peut y avoir et aura probablement des effets secondaires, c'est pourquoi j'ai dit d'utiliser l'objet (le premier). – user113716

+0

ok, alors comment remplir dynamiquement le hachage? personne ne semble répondre à cela. Je veux dire, ce n'est pas toujours possible de le définir statiquement ... Je suis perdu. – sarsnake

1

Oui. Dans le deuxième exemple d'exemple, vous "abusez" du fait qu'un Array est également un Object. Ne fais pas ça.

Utilisez Array s pour les valeurs indexées numériques uniquement et Objects pour les tables de hachage de type kinda. Je suggère d'en savoir plus sur Arrays et Objects.

En JavaScript, tout est fondamentalement un objet. Également des tableaux. Mais l'objet Array fournit des méthodes supplémentaires pour traiter les données numériques indexées.

Vous pouvez probablement voir la différence la meilleure lorsque vous faites samples.length dans le deuxième exemple. Un objet ordinaire n'a aucune propriété length, un tableau fait. Pour un tableau, il vous indique le nombre d'éléments stockés dans le tableau. Maintenant lorsque vous appelez samples.length dans le deuxième exemple, vous obtiendrez 0 parce que le tableau ne contient réellement aucun élément. Ce qui peut conduire à plus de confusion est le fait que vous avez deux possibilités pour accéder aux propriétés de l'objet: la "notation par points", object.property et la "notation de la matrice", . Mais ceci est une fonctionnalité d'objets non de tableaux. La notation de tableau est pratique, lorsque vous générez les clés ou avez le nom de la propriété stocké dans une variable

Mise à jour:

Comme il est écrit, vous pouvez utiliser la notation de tableau pour créer des propriétés dynamiquement, par exemple:

var samples = {}; 

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

Si vous souhaitez accéder aux propriétés, vous devez utiliser la boucle for...in itérer sur les touches:

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

Mais attention: Ne jamais utiliser for...in à boucle sur un tableau. Sur la page je suis lié à est également écrit pourquoi.

+0

voir la question éditée – sarsnake

+0

@gnomixa: Voir aussi ma mise à jour. –