JavaScriptでは、オブジェクトリテラルをいつ使用し、いつ配列を使用するかをいつ使用しますか?

StackOverflow https://stackoverflow.com/questions/4735877

質問

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

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

質問を手伝ってくれる人たちに、前もってありがとう。

役に立ちましたか?

解決

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

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

var obj = {}

//同じことをする3つの方法:

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'

通常、オブジェクトは、関連する値と方法のグループを一緒に保持して、参照を容易にすることに関するものです。配列は、通常、同じものに適用または導出されると想定できるもののリストにすぎません。

他のヒント

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

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

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

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

上記の場合、私は後者を好むでしょう。

それとは別に、決して使用しないでください for in アレイ上(そうです 非常に遅い 目的を打ち負かし、常に使用します hasOwnProperty オブジェクトのプロパティを反復するとき。

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

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番目の例では、単一のオブジェクトしか持っていないため、プロパティにアクセスするためにループをまったく必要としません。

var fooObj = { bar: { blah: 9 } };
var value = fooObj.bar.blah;
console.log(value);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top