重复索引不存储在Javascript中的关联数组中

时间:2014-12-08 14:54:45

标签: javascript arrays json

我试图将索引及其值存储在关联数组中,但它不存储具有不同值的重复索引。当我提醒这个json值时,只显示唯一值。这是我的代码:

 arr[1]="AAA";
 arr[2]="BBB"
 arr[3]="CCC"
 arr[2]="DDD"
 arr[2]="HHH" 

var jsonString = JSON.stringify(arr);
 alert(jsonString);

2 个答案:

答案 0 :(得分:2)

首先,javascript没有关联索引数组的概念。您有数字索引的数组或对象。

其次,如果您尝试将数据写入已定义的给定索引(或对象上的属性),您将覆盖该值。这在任何编程语言中都很常见。

听起来您只需要重新考虑数据结构。

答案 1 :(得分:1)

JavaScript不允许重复键。当您在已设置的键中写入值时,您将覆盖它而不是创建新键。

您可以使用内部列表在键中存储多个值,如下所示:

arr[1]="AAA";
arr[2]=["BBB"];
arr[3]="CCC";
arr[2].push("DDD");
arr[2].push("HHH");

var jsonString = JSON.stringify(arr);
alert(jsonString);

如果您希望所有密钥都像这样,您可以创建一个函数来复制此行为:

function pushToKey(arr, key, value) {
    var innerArr = arr[key];
    if (innerArr) {
        innerArr.push(value);
    } else {
        arr[key] = [value];
    };
}

然后总是使用这个功能:

var myArr = [];
pushToKey(myArr, 1, "AAA");
pushToKey(myArr, 2, "BBB");
pushToKey(myArr, 3, "CCC");
pushToKey(myArr, 2, "DDD");
pushToKey(myArr, 2, "HHH");

这将使myArr内的所有值都存储为数组。