如何将对象添加到数组jQuery

时间:2014-02-25 18:03:08

标签: jquery object each

我尝试将我的对象添加到数组中,但是在完成后我有所有相同的对象

$('#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个相同的对象,为什么?

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();