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

对象的每个键只能有一个值。如果您有两个或多个相同的密钥,则使用最后一个密钥。

于 2013-10-08T22:02:31.997 回答
1

您的对象仅包含两个字段。初始化对象时,如果两个字段具有相同的名称,则该名称的值将被最后一个覆盖。因此对于 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

使用 foreach 循环而不是 for。您似乎正在声明一个索引变量,但您应该将其设置为零并递增,以便循环可以迭代数组作为替代方案。

于 2013-10-08T22:03:15.493 回答