JS associative object with duplicate names

2019-01-27 04:02发布

ok, so I have an object like:

var myobject = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};

as you see there are duplicate names in the object, but with different values. If i go through it like (using jQuery):

$.each(myobject, function(key, value)
{
   console.log(key);
   console.log(myobject[key]);
   console.log(myobject[value]);
}

key - returns the correct key
myobject[key] - returns the name for that key
myobject[value] - returns the last elements', with that name, value

meaning for field_2 it will return 6, though it'll print it 3 times, as it repeats 3 times in the object.

My question is how to obtain the correct value for that duplicate named fields and not just the last one's

Thank you

8条回答
Fickle 薄情
2楼-- · 2019-01-27 04:17

You can't do this. The array key must be unique.

If you've got Firefox/Firebug installed (or similar in another browser), you can try it by entering this into the Firebug console:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};
console.dir(myarray);

Firebug will respond with:

field_1      "lorum ipsum"
field_2      6

in other words, it works, but each subsequent value specified for field_2 overwrites the previous one; you can only have one value for it at a time.

The closest you can get to what you want is to make field_2 an array in itself, something like this:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": [1,2,6]
};

If you do console.log now, you'll get this:

field_1      "lorum ipsum"
field_2
    0        1
    1        2
    2        6

Hope that helps.

查看更多
再贱就再见
3楼-- · 2019-01-27 04:19
  1. Your code has invalid syntax.
  2. There are no assocative arrays in Javascript
  3. The thing you defined is an Object
  4. If you give value to a property 3 times, sure it will contain the last value

Test

var obj = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};

for ( var i in obj ) {
  console.log(i + " = " + obj[i]);
}

OUTPUT

field_1 = lorem ipsum
field_2 = 6
查看更多
劳资没心,怎么记你
4楼-- · 2019-01-27 04:22

That is not an array that is an object. You'd be better creating a property of the object that is an array and store the different values in there.

var myarray = {
   "field_1": "lorem ipsum",
   "field_array": []
};

myarray.field_array.push(value);

then just loop through that property of the array.

查看更多
Luminary・发光体
5楼-- · 2019-01-27 04:23

It is not possible.

The resulting object does only contain 2 elements, the first and second field_2 elements are lost on creation.

查看更多
Luminary・发光体
6楼-- · 2019-01-27 04:35

The only way to get around it would be to either change the fields to unique identifiers, or something like:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": [
       {"value_1": 1},
       {"value_2": 2},
       {"value_3": 6}
   ]
};
查看更多
一纸荒年 Trace。
7楼-- · 2019-01-27 04:35

You're overwriting the same value several times.

What you want is probably something like:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": [1,2,6]
};

Which could be written in a manner similar to what you currently have:

var myarray = {};

myarray.field_1 = [];
myarray.field_1.push('lorem ipsum');
myarray.field_2 = [];
myarray.field_2.push(1);
myarray.field_2.push(2);
myarray.field_2.push(6);

Note that I made field_1 an array as well, which - for consistency - I thought you might want.

查看更多
登录 后发表回答