2015-01-13 35 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感謝您的客氣話語,我很高興您能夠克服您的問題並向前邁進! –