Question

Voici un exemple. Ce qui me préoccupe est à la fois semblent faire le travail. lequel d'entre eux à préférer?

var fooArr = [{ "bar": {"blah": 9 } }];

for(var i in fooArr) {
    var value = fooArr[i].bar.blah;
console.log(value); //checking in firebug console
}

var fooObj = { "bar": {"blah": 9 } };
for(var i in fooObj) {
    var value = fooObj[i].blah;
console.log(value); //checking in firebug console
}

En outre, ce qui suit semble ne pas être valide, toute façon d'éviter la notation de tableau.

var fooObj1 = {
    { "bar": { "blah": 9 } },
    { "bar": { "blah": 4 } },
    { "bar": { "blah":12} }
};

Je devais modifier le code ci-dessus à quelque chose comme ci-dessous qui fonctionne. Est-il trop trop mal pour être trop collant avec des objets littéraux

var fooObj1 = {
    1:{ "bar": { "blah": 9 } },
    2:{ "bar": { "blah": 4 } },
    3:{ "bar": { "blah":12} }
};

Merci encore et à l'avance à ceux qui me aident à la requête.

Était-ce utile?

La solution

L'échantillon ne se compare pas vraiment des objets et des tableaux. Vous êtes juste d'ajouter une couche inutile en plaçant un objet dans le premier élément d'un tableau.

Utilisez un objet lorsque vous devez vous référer à quelque chose par son nom.

var obj = {}

// 3 façons de faire la même chose:

var obj.newName = 'bob';

var obj['newName'] = 'bob';

var name = 'newName';
var obj[name] = 'bob';

Le 2ème style est pas vraiment nécessaire et pourrait effectivement être une touche plus lente à l'accès que le 1er mais il vous aide à comprendre comment le 3ème peut être utile. Ou vous auriez pu faire ce qui suit pur et simple:

var obj = { newName:'bob' }

Si vous voulez un tas de noms dans un objet, il obtiendrait un peu bête:

var obj = { newName:'bob', anotherNewName:'sue', yetAnotherNewName:'billy' }

obj.newName === 'bob'
obj.anotherNewName === 'sue'
//etc...

C'est ce que les tableaux sont pour.

var listOfNewNames = ['bob','sue','billy']
listOfNewNames[0] === 'bob'
listOfNewNames[1] === 'sue'
//etc...

Bien sûr, rien ne vous empêche d'assigner un tableau à une propriété de l'objet:

obj { listOfNewNames:['bob','sue','billy'] }

obj.listOfNewNames[0] === 'bob'

Ou, comme l'a démontré ci-dessus, plusieurs objets dans un tableau:

var listOfMonsters = [
    { monsterName:'Grarrr',eats:'people' },
    { monsterName:'Wadsworth',eats:'other monsters'}
];

listOfMonsters[1].monsterName === 'Wadsworth'

Les objets sont généralement plus sur le maintien des groupes de valeurs et méthodes connexes ainsi que pour faciliter la consultation. Les tableaux sont juste une liste de choses que tous peuvent généralement être supposés appliquer ou dérivent de la même chose.

Autres conseils

Une boucle de for .. in itère sur enumerables. Vous pouvez lire sur elle .

Si vous avez un tableau d'objets que je suggère une boucle de for traditionnelle:

var fooObjs = [ {bar: "blah"}, {bar: "blah2"} ];
for (var i = 0, j = fooObj.length; i < j; i++) {
  console.log(fooObjs[i].bar);
}

Si vous avez un objet avec des propriétés multiples, vous pouvez utiliser la boucle de for .. in:

var fooObj = { bar: "blah", baz: "blah2" };
for (var i in fooObj) {
  if (fooObj.hasOwnProperty(i)) { // So you don't log prototype properties
    console.log(fooObj[i]);
  }
}

Utilisez un tableau quand vous savez que vous aurez plus d'un objet. Un tableau d'un élément n'est pas nécessaire lorsqu'un seul objet sera utilisé.

Comme vous pouvez le voir, la syntaxe est un peu plus complexe (vous avez [...] et bar lors de l'utilisation des tableaux -> caractères sont utilisés), donc ne pas l'utiliser si vous n'avez pas besoin

utiliser le tableau si vous avez besoin des listes et des objets d'utilisation si vous avez besoin des propriétés.

Dans le cas ci-dessus, je préfère le second.

En dehors de cela, ne jamais utiliser for in sur un tableau (il est extrêmement lent et défaites le but) et utilisez toujours hasOwnProperty lorsque vous parcourez les propriétés d'un objet.

Vous utilisez un tableau lorsque vous avez besoin d'utiliser plus d'un article. Exemple:

var fooArr = [{ bar: { blah: 9 } },{ bar: { blah: 4 } },{ bar: { blah: 12 } }];
for(var i in fooArr) {
  var value = fooArr[i].bar.blah;
  console.log(value); // will log "9", "4" and "12"
}

Dans le second exemple vous avez un seul objet, de sorte que vous n'avez pas besoin de la boucle du tout pour accéder à la propriété:

var fooObj = { bar: { blah: 9 } };
var value = fooObj.bar.blah;
console.log(value);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top