var myobject = {
"field_1": "lorem ipsum",
"field_2": 1,
"field_2": 2,
"field_2": 6
};
如您所见,对象中有重复的名称,但具有不同的值。如果我像(使用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
对于field_2来说意味着它会返回6,虽然它会打印3次,因为它会在对象中重复3次。
我的问题是如何为重复的命名字段获取正确的值,而不仅仅是最后一个
谢谢
答案 0 :(得分:6)
这不是一个对象的数组。你最好创建一个数组对象的属性,并在那里存储不同的值。
var myarray = {
"field_1": "lorem ipsum",
"field_array": []
};
myarray.field_array.push(value);
然后只循环遍历数组的属性。
答案 1 :(得分:2)
<强>测试强>
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]);
}
<强>输出强>
field_1 = lorem ipsum
field_2 = 6
答案 2 :(得分:1)
密钥必须是唯一的。
答案 3 :(得分:1)
你不能这样做。数组键必须是唯一的。
如果你安装了Firefox / Firebug(或者在其他浏览器中使用过类似的话),你可以通过在Firebug控制台中输入它来尝试:
var myarray = {
"field_1": "lorem ipsum",
"field_2": 1,
"field_2": 2,
"field_2": 6
};
console.dir(myarray);
Firebug会回复:
field_1 "lorum ipsum"
field_2 6
换句话说,它可以工作,但是为field_2指定的每个后续值都会覆盖前一个值;你一次只能拥有一个值。
最接近你想要的是将field_2本身变成一个数组,如下所示:
var myarray = {
"field_1": "lorem ipsum",
"field_2": [1,2,6]
};
如果你现在console.log
,你会得到这个:
field_1 "lorum ipsum"
field_2
0 1
1 2
2 6
希望有所帮助。
答案 4 :(得分:0)
解决问题的唯一方法是将字段更改为唯一标识符,或类似:
var myarray = { "field_1": "lorem ipsum", "field_2": [ {"value_1": 1}, {"value_2": 2}, {"value_3": 6} ] };
答案 5 :(得分:0)
这是不可能的。
结果对象只包含2个元素,第一个和第二个field_2元素在创建时丢失。
答案 6 :(得分:0)
Javascript中不存在关联数组 - 您创建的是使用JSON格式的Object。
我怀疑像这样的东西会给你更多你想要的东西,不过我建议质疑你想要达到的目的......
以下代码允许您访问重复“密钥”的多个实例,但是
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 :(得分:-1)
你多次覆盖相同的值。
你想要的可能是:
var myarray = {
"field_1": "lorem ipsum",
"field_2": [1,2,6]
};
可以用类似于你现在的方式编写:
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);
请注意,我也将field_1
作为一个数组,为了保持一致性,我认为您可能需要。