具有重复名称的JS关联对象

时间:2010-10-22 10:59:24

标签: javascript object duplicates javascript-objects associative

好的,所以我有一个像这样的对象:

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次。

我的问题是如何为重复的命名字段获取正确的值,而不仅仅是最后一个

谢谢

8 个答案:

答案 0 :(得分:6)

这不是一个对象的数组。你最好创建一个数组对象的属性,并在那里存储不同的值。

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

myarray.field_array.push(value);

然后只循环遍历数组的属性。

答案 1 :(得分:2)

  1. 您的代码语法无效。
  2. Javascript中没有关联数组
  3. 您定义的是对象
  4. 如果您为某个属性赋值3次,请确保它包含最后一个值
  5. <强>测试

    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作为一个数组,为了保持一致性,我认为您可能需要。