我尝试将我的对象添加到数组中,但是在完成后我有所有相同的对象
$('#Create').click(function(event) {
event.preventDefault();
var categoryId = $('#CatId').val();
var enteredDate = $('#datepicker').val();
var empId = $('#employeeID').text();
var systemDate = $.datepicker.formatDate('dd.mm.yy', new Date());
var obj = {
CategoryId: categoryId,
EnteredDate: enteredDate,
SystemDate: systemDate,
EmpId: empId
};
var arrToServer = [];
var list = new Array();
$("input[type=checkbox]:checked").each(function() {
var productId = $(this).attr('id');
obj.ProductId = productId;
arrToServer.push(obj);
});
arrToServer = JSON.stringify(arrToServer);
}
我的arrToServer有2个相同的对象,为什么?
答案 0 :(得分:4)
创建对象的副本,然后设置项目ID。
$("input[type=checkbox]:checked").each(function () {
var productId = $(this).attr('id');
var clonedobj = jQuery.extend({}, obj); //create a shallow
clonedobj.ProductId = productId;
arrToServer.push(clonedobj);
});
答案 1 :(得分:3)
我的arrToServer有2个相同的对象,为什么?
因为您只在循环外创建一个对象,并将同一个对象多次推送到该数组。将对象传递给函数或将其分配给不同的变量不会创建对象的副本。
在循环中创建对象(带循环我的意思是.each
回调)。
以下是使用.map
的示例,它更清晰IMO:
var arrToServer = $("input[type=checkbox]:checked").map(function() {
return {
CategoryId: categoryId,
EnteredDate: enteredDate,
SystemDate: systemDate,
EmpId: empId,
ProductId: $(this).attr('id')
};
}).get();