Я новый ученик 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"}
]
Что мне делать? Пожалуйста, порекомендуйте.
Проблема в том, что вы нажимаете ссылку на один и тот же объект (хранящийся на 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]
};
});
создать внутри loopp a
....
for(var i=0;i<myArray.length;i++){
var a = {};
^^^^^^^^^^^ here
var ex_array = myArray[i].split(",");
$all_data["holiday"]