2

これがサンプルです。私の懸念は両方とも仕事をしているようだということです。それらのどれを好むのですか?

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
}

また、以下は無効のようです。配列表記を回避する方法。

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

したがって、上記のコードを以下のように変更する必要がありました。オブジェクトリテラルに固執しすぎるのは残念ですか

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

質問を手伝ってくれた人たちに改めて感謝します。

4

5 に答える 5

9

サンプルは実際にはオブジェクトと配列を比較していません。配列の最初の要素にオブジェクトを配置することで、不要なレイヤーを追加しているだけです。

名前で何かを参照する必要がある場合は、オブジェクトを使用します。

var obj = {}

//同じことを行う方法:

var obj.newName = 'bob';

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

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

2番目のスタイルは実際には必要ではなく、実際には1番目のスタイルよりもアクセスが少し遅い場合がありますが、3番目のスタイルがどのように役立つかを理解するのに役立ちます。または、次のことを完全に行うことができます。

var obj = { newName:'bob' }

オブジェクトにたくさんの名前が必要な場合は、少しばかげています。

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

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

それがアレイの目的です。

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

もちろん、オブジェクトプロパティに配列を割り当てることを妨げるものは何もありません。

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

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

または、上記のように、配列内の複数のオブジェクト:

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

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

オブジェクトは通常、参照を容易にするために、関連する値とメソッドのグループをまとめることに関するものです。配列は、すべてが同じものに適用される、または同じものから派生すると通常想定できるものの単なるリストです。

于 2011-01-19T14:25:30.530 に答える
2

ループは列挙可能なfor .. inものを繰り返し処理します。あなたはそれを読みたいかもしれません。

オブジェクトの配列がある場合は、従来のforループをお勧めします。

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

複数のプロパティを持つオブジェクトがある場合は、次の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]);
  }
}
于 2011-01-19T13:54:04.923 に答える
1

複数のオブジェクトがあることがわかっている場合は、配列を使用します。1つのオブジェクトのみが使用される場合、1つのアイテムの配列は必要ありません。

ご覧のとおり、構文も少し複雑です(配列を使用している場合は[...]barより多くの文字が使用されます)。したがって、必要がない場合は使用しないでください。

于 2011-01-19T13:47:46.393 に答える
1

リストが必要な場合は配列を使用し、プロパティが必要な場合はオブジェクトを使用します。

上記の場合、後者の方がいいと思います。

それを除けばfor in、配列では決して使用せず(非常に遅くhasOwnProperty、目的を損なう) 、オブジェクトのプロパティを反復処理するときに常に使用します。

于 2011-01-19T13:48:56.113 に答える
1

複数のアイテムを使用する必要がある場合は、配列を使用します。例:

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

2番目の例では、オブジェクトが1つしかないため、プロパティにアクセスするためにループはまったく必要ありません。

var fooObj = { bar: { blah: 9 } };
var value = fooObj.bar.blah;
console.log(value);
于 2011-01-19T13:48:56.973 に答える