2014-03-31 43 views
0

我是一個新的jquery學習者。我有個問題。關於jquery關聯數組我應該怎麼做?

我寫了這個腳本,但結果不正確。

var details = <?php echo json_encode($all_data["holiday"]);?>; 
var myArray = details.split("|"); 
var a = {}; 
var natDays = []; 

for(var i=0;i<myArray.length;i++){ 
    var ex_array = myArray[i].split(","); 
    a["month"] = ex_array[0]; 
    a["date"] = ex_array[1]; 
    a["name"] = ex_array[2]; 

    natDays.push(a); 
} 

alert(JSON.stringify(natDays)); 

我得到以下不正確的結果在警報:

[ 
    {"month":"3","date":"7","name":"test"}, 
    {"month":"3","date":"7","name":"test"}, 
    {"month":"3","date":"7","name":"test"}, 
    {"month":"3","date":"7","name":"test"} 
] 

它應該是:

[ 
    {"month":"4","date":"11","name":"test"}, 
    {"month":"4","date":"4","name":"test"}, 
    {"month":"4","date":"13","name":"song kran festival"}, 
    {"month":"3","date":"7","name":"test"} 
] 

我該怎麼辦?請指教。

+2

請顯示'$ all_data [「假期」]' –

回答

1

問題是,你在循環的每一步按下對同一個對象(存儲在a)的引用 - 如a['month']等,你只是增加一個現有的對象,而不是創建一個新的。

爲了解決這個問題,擺脫掉這個a變量,創建於直接在每個步驟中新的對象,與object literal符號:

for (var i=0; i < myArray.length; i++){ 
    var ex_array = myArray[i].split(","); 
    natDays.push({ 
    month: ex_array[0], 
    date: ex_array[1], 
    name: ex_array[2] 
    }); 
} 

可以使代碼更簡捷的使用jQuery.map()

var natDays = $.map(myArray, function(rec) { 
    var fields = rec.split(','); 
    return { 
    month: fields[0], 
    date: fields[1], 
    name: fields[2] 
    }; 
}); 
+0

謝謝你!我已經解決了它。^_ ^ – Tui

0

創建a內loopp

.... 
for(var i=0;i<myArray.length;i++){ 
    var a = {}; 
    ^^^^^^^^^^^ here 
    var ex_array = myArray[i].split(",");