JS associative object with duplicate names
Solution 1
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.
Solution 2
Associative arrays do not exist in Javascript - what you have created is an Object using the JSON format.
I suspect that something like this will give you more what you are seeking, though I suggest questioning exactly what it is that you are trying to achieve..
The following code will allow you to access multiple instances of duplicated 'keys', but is
var myDataset = [
{ "field_1": "lorem ipsum" },
{ "field_2": 1 },
{ "field_2": 2 },
{ "field_2": 6 }
];
$.each(myDataset, function(valuePairIndex, value)
{
$.each(myDataset[valuePairIndex], function(key, value1)
{
var valuePair = myDataset[valuePairIndex];
console.log(valuePairIndex);
console.log(key + ' = ' + valuePair[key]);
// console.log('key = ' + key);
// console.log('valuePair[key] = ' + valuePair[key]);
});
});
Solution 3
- Your code has invalid syntax.
- There are no assocative arrays in Javascript
- The thing you defined is an Object
- 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
Solution 4
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.
Solution 5
The keys must be unique.
SteeleR
Updated on June 04, 2022Comments
-
SteeleR almost 2 years
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
-
Pointy over 13 yearsThose are not arrays, they're objects. You can call them "myarray" if you like, of course, but they're not arrays.
-
Spudley over 13 years@Pointy - you're right of course. I used the word 'array' because that's how it was asked in the question.
-
Pointy over 13 yearsSorry to have worded that so rudely; I had just hurt my foot on a chair in this dark room before clicking into this question :-)
-
Cory Gross about 10 yearsThe top definition of
myarray
is not the same as the definition ofmyarray
below. You should either place the string"lorem ipsum"
in an array literal infield_1
of the first definition, or simply assign the string"lorem ipsum"
tofield_1
in the second definition.