var obj = { key: value1, key: value2}
我想迭代它并获得 (key and value1) 和 (key and value2)
如果我使用简单的循环:
for (var i in obj){
console.log(obj[i])
}
我得到:键值2 键值2
所以 obj[i] 总是取最后一个键
var obj = { key: value1, key: value2}
我想迭代它并获得 (key and value1) 和 (key and value2)
如果我使用简单的循环:
for (var i in obj){
console.log(obj[i])
}
我得到:键值2 键值2
所以 obj[i] 总是取最后一个键
JS 对象中的键必须是唯一的。
会发生什么,是:
var obj = {
key : value1
}
设置obj['key']
为value1
。
随后的声明将key : value2
覆盖您之前的声明。
您的问题的可能解决方案:
var obj = {
key : [value1, value2]
}
for (var i in obj)
{
if (obj[i] instanceof Array)
{
for (var k; k < obj[i].length; k++)
{
console.log(obj[i][k])
}
}
else
{
console.log(obj[i]);
}
}
另一个可能更优雅的解决方案是修改存储数据的方式,如下所示:
var obj = [
{ key : 'SomeKey' , value : 'foo' },
{ key : 'SomeKey' , value : 'bar' },
{ key : 'SomeOtherKey', value : 'baz' }
];
这显然允许具有相同键的多个条目。查询可以按照以下方式在某处进行:
values = [];
for (var i = 0; i < obj.length; i++)
{
if (obj[i].key === 'SomeKey')
{
values.push(obj[i].value);
}
}
console.log(values);
这是不可能的。如声明中所述:
var obj = { key: value1, key: value2}
Initially obj.key is set as value1
, in the second assignment value1
is rewritten with value2
, So, obj.key is now value2
.
So you cannot access the initial value.