Frage

Hier ist eine Probe. Meine Sorge ist, beide scheinen die Arbeit zu erledigen. Wer von ihnen bevorzugen?

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
}

Auch die folgende scheint nicht gültig zu sein, jede mögliche Art und Weise Array-Notation zu vermeiden.

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

So hatte ich den obigen Code, um etwas zu ändern, wie unter dem Werk. Ist es zu schade, zu viel klebriger mit Objektliterale zu sein

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

Nochmals vielen Dank im Voraus für diejenigen, die mir mit der Frage helfen.

War es hilfreich?

Lösung

Die Probe nicht wirklich Objekte und Arrays vergleichen. Du fügst gerade eine unnötige Schicht durch ein Objekt in dem ersten Elemente eines Arrays setzen.

Verwenden Sie ein Objekt aus, wenn Sie etwas mit Namen zu beziehen haben.

var obj = {}

// 3 Wege, das gleiche tun:

var obj.newName = 'bob';

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

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

Der zweite Stil ist nicht wirklich notwendig und könnte tatsächlich ein Hauch langsamer Zugang als die ersten sein, aber es hilft Ihnen zu verstehen, wie die dritte nützlich sein kann. Oder Sie könnten die folgende geradezu getan haben:

var obj = { newName:'bob' }

Wenn Sie eine Reihe von Namen in einem Objekt wollen, wäre es ein wenig bekommen dumm:

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

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

Das ist, was Arrays sind für.

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

Natürlich nichts verhindert, dass Sie die Zuordnung eines Arrays zu einem Objekt-Eigenschaft:

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

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

oder, wie oben gezeigt, mehr Objekte in einem Array:

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

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

Gegenstände sind in der Regel mehr über Gruppen von verwandten Werten und Methoden zusammen für eine einfache Referenz zu halten. Arrays sind nur eine Liste von Sachen, die alle in der Regel davon ausgegangen werden können, um bewerben oder von der gleichen Sache ableiten.

Andere Tipps

Eine for .. in Schleife iteriert enumerables über. Vielleicht möchten Sie auf nachlesen drauf .

Wenn Sie ein Array von Objekten haben würde ich eine traditionelle for Schleife vorschlagen:

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

Wenn Sie ein Objekt mit mehreren Eigenschaften haben, dann könnten Sie die for .. in Schleife verwenden:

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]);
  }
}

ein Array verwenden, wenn Sie wissen, dass Sie mehr als ein Objekt. Ein ein Element Array ist nicht erforderlich, wenn nur ein Objekt verwendet werden.

Wie Sie sehen können, die Syntax ist auch ein wenig komplexer (Sie haben [...] und bar wenn Arrays -> mehr Zeichen verwendet werden), so verwenden Sie es nicht, wenn Sie nicht brauchen, um

Verwenden Array wenn Sie Listen und Objekte verwenden, wenn Sie Eigenschaften benötigen.

Im obigen Fall, würde ich das letztere vorziehen.

Abgesehen davon, nie for in auf einem Array verwenden (es ist extrem langsam und Niederlagen der Zweck) und verwenden immer hasOwnProperty wenn Iterieren über die Eigenschaften eines Objekts.

Sie verwenden ein Array, wenn Sie brauchen mehr zu verwenden als ein Element. Beispiel:

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

Im zweiten Beispiel nur ein einzelnes Objekt, so dass Sie überhaupt die die Schleife brauchen nicht die Eigenschaft zuzugreifen:

var fooObj = { bar: { blah: 9 } };
var value = fooObj.bar.blah;
console.log(value);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top