2015-01-13 38 views
0

这可能很明显,但为什么在向此javascript数组中添加键值对时没有获得预期的JSON字符串?JavaScript assoc assoc数组添加键值对意外的结果

下一步:如代码所示,我实际上希望在对象中有两个数据集。

jsFiddle here - Weird, at moment only "works" in Chrome

var myKey = "123", myVal="Car"; 
var arrSummat = new Array(); 

$('#mybutt').click(function(){ 
    arrSummat["987"] = "Boat"; 
    //arrSummat[myKey] = myVal; 
    var test = JSON.stringify(arrSummat); 
    alert(test); 
}); 
+5

步骤一:'Array'应当只用作阵列。不是对象或“关联数组”。如果你想让一个关联数组使用一个对象:'arrSummat = {}; arrSummat [“987”] =“船”;' –

+0

以下是您的示例作为对象:http://jsfiddle.net/s7tdq469/1/ –

+3

Aaaargh。你有没有想过我访问了多少个博客/ tuts/pages来讨论这个问题,我发现所有的js中的assoc数组都是对象,然后像上面那样定义它们。真诚感谢您的解决方案。请添加为接受的答案。 – crashwap

回答

5

在JavaScript中构建的副阵列*或散列映射或对象可能不是非常明显。首先,所有东西最终都是一个对象,所以与关联数组一起使用的语法在所有不是“关联数组”的东西上都是有效的,这可能会导致混淆。首先让我们来解决这个问题。你可能想用的,而不是一个数组的对象:

arrSummat = {}; 
arrSummat["987"] = "Boat"; 
console.log(JSON.stringify(arrSummat)); // => {"987":"Boat"} 

当运行你的小提琴(在Chrome中)我几乎得到一个数组986个null值,然后"Boat"(我可能是错的,我m不是手动计算该警报中的null)。

现在,你原来的问题解决了,我想指出,你可能要开始做不同的两件事情:

更喜欢OBJETS和数组简写语法。这两个例子在功能上是相同的,但您应该更喜欢第二个用于大多数目的。

var myArr = new Array(); 
var myObj = new Object(); 

是一样的:

var myArr = []; 
var myObj = {}; 

速记甚至可以想出一些基本的价值观:

var myArr = [1, 2, 3]; 
var myObj = {one: "1", two: "2"}; 

其次,切勿使用Array对象不是一个数组其他任何东西。这在语法上是有效的,但它会产生意想不到的结果(正如你在这里看到的)。

  • JavaScript中没有“关联数组”,但对象通常用作替代品并提供类似的功能。

Revised jsFiddle Link

+0

梦幻般的回应和价值比收到更多upvotes。 Thx也用于连接'null'的数量和提供的值 - 我没有注意到。希望我可以再次升级。 – crashwap

+0

@crashwap感谢您的客气话语,我很高兴您能够克服您的问题并向前迈进! –