1

違いはありますか?

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

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

編集:

質問を言い換えます:ハッシュを動的に入力するにはどうすればよいですか?私はサンプルのようなことをすることができません。私はTB10152254-003が動的であるため、TB10152254-003 ...それで、それも可能ですか?

4

2 に答える 2

2

配列はオブジェクトの一種であるため、どちらも機能します。ただし、この方法で配列を使用する利点はなく、。を使用してプロパティを反復処理すると、問題が発生しやすくなりますfor/in

オブジェクトは、名前付きプロパティに使用する適切なタイプになります。配列の使用は、インデックスプロパティのみに予約してください。


編集に関しては、角括弧表記を使用して、配列と同じ方法でオブジェクトに動的にデータを入力できます。

   // 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"
        };
于 2011-01-18T01:42:22.963 に答える
1

はい。2番目の例の例では、Arrayasも。であるという事実を「悪用」していObjectます。これをしないでください。

Arraysは数値のインデックス値にのみ使用し、プレーンObjectsはちょっとしたハッシュテーブルに使用します。

ArraysObjectsについてもっと読むことをお勧めします。

JavaScriptでは、基本的にすべてがオブジェクトです。また、配列。ただし、このArrayオブジェクトは、数値のインデックス付きデータを処理するための追加のメソッドを提供します。

samples.length2番目の例で行うと、おそらく違いが最もよくわかります。プレーンオブジェクトにはプロパティがありませんlengthが、配列にはあります。配列の場合、配列に格納されている要素の数がわかります。samples.length2番目の例を呼び出すと0、配列には実際には要素が含まれていないため、次のようになります。

さらに混乱を招く可能性があるのは、オブジェクトのプロパティにアクセスするための2つの可能性があるという事実です。「ドット表記」object.propertyと「配列表記」ですobject['property']。ただし、これは配列ではなくオブジェクトの機能です。

配列表記は、キーを生成するとき、またはプロパティ名を変数に格納するときに便利です。

アップデート:

記述されているように、配列表記を使用して、プロパティを動的に作成できます。例:

var samples = {};

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

プロパティにアクセスする場合は、for...inループを使用してキーを反復処理する必要があります。

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

ただし、注意:for...in配列をループするために使用することは絶対にしないでください。リンク先のページにも理由が書かれています。

于 2011-01-18T01:43:40.950 に答える