我有以下代码段:
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
为什么呢?对我来说一切似乎都很好(显然不是),但我无法弄清楚为什么我无法打印整个结构...
答案 0 :(得分:3)
您正在声明具有相同名称的媒体资源。所以相当于:
var headers = {};
headers.date = 'Date';
headers.number = 'Total Responses';
//etc
headers.number = 'Files Requested';
您正在覆盖该属性,以便最后一个获胜。
我总是将JavaScript对象视为键/值对的字典。同样,您只能拥有一个密钥,在本例中为number
。
答案 1 :(得分:2)
对象每个键只能有一个值。如果您有两个或更多相同的密钥,则使用最后一个密钥。
答案 2 :(得分:1)
您的对象只包含两个字段。初始化对象时,如果两个字段具有相同的名称,则该名称的值将被最后一个字段覆盖。所以对于JavaScript程序来说输出是正确的,即使它可能不是你想要的。也许你可以使用一组对象,例如[{'date': 'Date'}, {'number': 'Total Responses'}, {'number': 'Total 404 not found'}, ...]
答案 3 :(得分: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'
};
答案 4 :(得分:0)
使用foreach循环而不是for。您似乎正在声明一个索引变量,但您应该将其设置为零并增加,以便循环可以迭代遍历数组作为替代。