var obj = { key: value1, key: value2}
I would like to iterate it and get pars of (key and value1) and (key and value2)
if I use simple cycle:
for (var i in obj){
 console.log(obj[i])
}
I got: key value2 key value2
so obj[i] always take last key
Keys in JS objects must be unique.
What happens, is:
var obj = {
    key : value1
}
sets obj['key'] to value1.
The subsequent declaration of key : value2 overwrites your previous one.
Possible solution to your problem:
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]);
    }
}
Another, possibly more elegant, solution would be to modify the way you store your data like so:
var obj = [
    { key : 'SomeKey'     , value : 'foo' },
    { key : 'SomeKey'     , value : 'bar' },
    { key : 'SomeOtherKey', value : 'baz' }
];
This obviously allows for multiple entries with the same key. The querying could be done somewhere along these lines:
values = [];
for (var i = 0; i < obj.length; i++)
{
    if (obj[i].key === 'SomeKey')
    {
        values.push(obj[i].value);
    }
}
console.log(values);
                        This is not possible. As in the declaration:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With