问题
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
回答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.
回答2:
- 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
回答3:
The keys must be unique.
回答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.
回答5:
It is not possible.
The resulting object does only contain 2 elements, the first and second field_2 elements are lost on creation.
回答6:
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]);
});
});
回答7:
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} ] };
回答8:
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.
来源:https://stackoverflow.com/questions/3996135/js-associative-object-with-duplicate-names