admin管理员组文章数量:1201200
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
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
Share Improve this question edited Mar 23, 2018 at 10:24 TessavWalstijn 1,7262 gold badges22 silver badges37 bronze badges asked Oct 22, 2010 at 10:59 SteeleRSteeleR 711 gold badge1 silver badge4 bronze badges 3- 1 As far as I know, arrays like this can't work. Where do they come from in the first place? – Pekka Commented Oct 22, 2010 at 11:01
- 1 That's impossible. Check your code. – Tim Down Commented Oct 22, 2010 at 11:10
- 1 You have a syntax error in your code - your $.each() function isn't closed.. – kwah Commented Oct 22, 2010 at 12:37
8 Answers
Reset to default 7That 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.
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]);
});
});
- 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
The keys must be unique.
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.
It is not possible.
The resulting object does only contain 2 elements, the first and second field_2 elements are lost on creation.
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} ] };
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.
本文标签: javascriptJS associative object with duplicate namesStack Overflow
版权声明:本文标题:javascript - JS associative object with duplicate names - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738614734a2102841.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论