2

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

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

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

谢谢

4

8 回答 8

6

那不是一个数组,它是一个对象。您最好创建一个数组对象的属性并将不同的值存储在其中。

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

myarray.field_array.push(value);

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

于 2010-10-22T11:03:59.547 回答
2

Javascript 中不存在关联数组 - 您创建的是使用 JSON 格式的对象。

我怀疑这样的事情会给你更多你正在寻找的东西,尽管我建议你确切地质疑你想要实现的目标是什么。

以下代码将允许您访问重复“键”的多个实例,但是

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]);
    });
});
于 2010-10-22T12:58:39.160 回答
2
  1. 您的代码语法无效。
  2. Javascript 中没有关联数组
  3. 你定义的东西是一个对象
  4. 如果您为属性赋值 3 次,请确保它包含最后一个值

测试

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
于 2010-10-22T11:08:16.877 回答
1

键必须是唯一的。

于 2010-10-22T11:02:46.230 回答
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

希望有帮助。

于 2010-10-22T11:08:56.943 回答
1

这不可能。

结果对象仅包含 2 个元素,第一个和第二个 field_2 元素在创建时丢失。

于 2010-10-22T11:10:12.160 回答
0

解决它的唯一方法是将字段更改为唯一标识符,或者类似:

变量 myarray = {
   "field_1": "lorem ipsum",
   “field_2”:[
       {"value_1": 1},
       {"value_2": 2},
       {“value_3”:6}
   ]
};
于 2010-10-22T11:05:29.203 回答
-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一个数组,为了保持一致性,我认为您可能想要。

于 2010-10-22T11:06:54.960 回答