JavaScript:如何使用两个相同的键迭代对象(并获取两个值)

时间:2012-09-24 08:39:32

标签: javascript

var obj = { key: value1, key: value2}

我想迭代它并得到(key和value1)和(key和value2)的分析

如果我使用简单循环:

for (var i in obj){
 console.log(obj[i])
}

我得到了: 关键价值2 关键值2

所以obj [i]总是拿最后一把钥匙

2 个答案:

答案 0 :(得分:11)

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);

答案 1 :(得分:2)

这是不可能的。 如在声明中:

var obj = { key: value1, key: value2}

最初obj.key设置为value1,第二个作业value1value2改写,所以,obj.key现在是value2
所以你无法访问初始值。