0

次のコード スニペットがあります。

var headers = { 'date' : 'Date', 
                'number' : 'Total Responses', 
                'number' : 'Total 404 not found',
                'number' : 'Total Connects', 
                'number' : 'Header Bytes', 
                'number' : 'Total Bytes',
                'number' : 'Total Connects', 
                'number' : 'Data Read',
                'number' : 'Files Requested'
            };
for (var index in headers) {
    console.log(index + " : " + headers[index])
}

そして、それはマップ全体を印刷するわけではありません:

date : Date
number : Files Requested

なぜ?私にとってはすべて問題ないように思えますが (明らかにそうではありません)、構造全体を印刷できない理由がわかりません...

4

5 に答える 5

3

同じ名前のプロパティを宣言しています。したがって、同等のものは次のようになります。

var headers = {};
headers.date = 'Date';
headers.number = 'Total Responses';
//etc
headers.number = 'Files Requested';

プロパティを上書きしているので、最後のものが勝ちます。

私は常に、JavaScript オブジェクトをキーと値のペアの辞書と考えています。同様に、この場合はnumber.

于 2013-10-08T22:02:44.610 に答える
2

オブジェクトは、各キーに対して 1 つの値のみを持つことができます。同じキーが 2 つ以上ある場合は、最後のキーが使用されます。

于 2013-10-08T22:02:31.997 に答える
1

オブジェクトには 2 つのフィールドしか含まれていません。オブジェクトが初期化されるとき、2 つのフィールドが同じ名前を持つ場合、その名前の値は最後の名前で上書きされます。そのため、JavaScript プログラムの出力は、必要なものではない場合でも正しいものになります。おそらく、オブジェクトの配列を使用できます。[{'date': 'Date'}, {'number': 'Total Responses'}, {'number': 'Total 404 not found'}, ...]

于 2013-10-08T22:02:06.797 に答える
1

一意のプロパティ名を使用してください。

var headers = { 'date' : 'Date', 
            'number1' : 'Total Responses', 
            'number2' : 'Total 404 not found',
            'number3' : 'Total Connects', 
            'number4' : 'Header Bytes', 
            'number5' : 'Total Bytes',
            'number6' : 'Total Connects', 
            'number7' : 'Data Read',
            'number8' : 'Files Requested'
        };
于 2013-10-08T22:04:13.160 に答える
0

for の代わりに foreach ループを使用します。インデックス変数を宣言しているように見えますが、代わりにループが配列を反復処理できるように、ゼロに設定してインクリメントする必要があります。

于 2013-10-08T22:03:15.493 に答える