2015-05-07 28 views
2

的价值我有一个JSON数组像下面如何克隆JSON阵列,无需改变现有JSON数组

[{ 
    "shiftNo": "shift 1", 
    "UserId": 4, 
    "UserName": "Felicia Frazier", 
    "opnAmt": 0, 
    "ClsAmt": 0, 
    "RegisterName": "kano", 
    "RegisterId": 2, 
    "ZId": 19, 
     "OpenDate": "2014-11-24 08:51:56.000", 
    "CloseDate": "2014-11-24 16:58:02.000", 
    "Total": 21.83, 
     "PaymentDetails": [{ 
     "PayId": 1, 
     "PaymentName": "Cash", 
     "PaidAmount": 0 
    }, { 
     "PayId": 2, 
     "PaymentName": "Check", 
     "PaidAmount": 0 
    }, { 
     "PayId": 3, 
     "PaymentName": "Credit Card", 
     "PaidAmount": 21.83 
    }] 
}, 

{ 
    "shiftNo": "shift 1", 
    "UserId": 5, 
    "UserName": "Dewayne Frazier", 
    "opnAmt": 0, 
    "ClsAmt": 0, 
    "RegisterName": "kano", 
    "RegisterId": 2, 
    "ZId": 19, 
     "OpenDate": "2014-11-24 08:51:56.000", 
    "CloseDate": "2014-11-24 16:58:02.000", 
    "Total": 26.2, 
     "PaymentDetails": [{ 
     "PayId": 1, 
     "PaymentName": "Cash", 
     "PaidAmount": 5.45 
    }, { 
     "PayId": 2, 
     "PaymentName": "Check", 
     "PaidAmount": 0 
    }, { 
     "PayId": 3, 
     "PaymentName": "Credit Card", 
     "PaidAmount": 20.75 
    }] 
}, 


{ 
    "shiftNo": "shift 2", 
    "UserId": 5, 
    "UserName": "Dewayne Frazier", 
    "opnAmt": 202.91, 
    "ClsAmt": 0, 
    "RegisterName": "kano", 
    "RegisterId": 6, 
    "ZId": 20, 
     "OpenDate": "2014-11-24 10:32:23.000", 
    "CloseDate": "2014-11-24 22:01:37.000", 
    "Total": 2380.69, 
     "PaymentDetails": [{ 
     "PayId": 1, 
     "PaymentName": "Cash", 
     "PaidAmount": 818.65 
    }, { 
     "PayId": 2, 
     "PaymentName": "Check", 
     "PaidAmount": 90.1 
    }, { 
     "PayId": 3, 
     "PaymentName": "Credit Card", 
     "PaidAmount": 1471.94 
    }] 
}, 

{ 
    "shiftNo": "shift 2", 
    "UserId": 7, 
    "UserName": "Kelvin Daniels", 
    "opnAmt": 100, 
    "ClsAmt": 0, 
    "RegisterName": "kano", 
    "RegisterId": 6, 
    "ZId": 20, 
     "OpenDate": "2014-11-24 10:32:23.000", 
    "CloseDate": "2014-11-24 22:01:37.000", 
    "Total": 1516.33, 
     "PaymentDetails": [{ 
     "PayId": 1, 
     "PaymentName": "Cash", 
     "PaidAmount": 1516.33 
    }, { 
     "PayId": 2, 
     "PaymentName": "Check", 
     "PaidAmount": 0 
    }, { 
     "PayId": 3, 
     "PaymentName": "Credit Card", 
     "PaidAmount": 0 
    }] 
}] 

我现在做了以下功能

我有分配该阵列转移明智的分组上述JSON在

var ParsedJson = above JSON.

我使用下面的功能是:

var SubGridResult = getShiftReportSubGridGroupedValue(ParsedJson, groupColumnName, RegisterName); 

function getShiftReportSubGridGroupedValue(sourceResult, groupColumnName, RegisterName) { 

    //ParsedJson.filter(function (v) { return v[groupColumnName] == getRemovedCountFormatedValue(jQuery('#tblShiftSummaryReport').jqGrid('getCell', row_id, groupColumnName).trim()) }), 
    var pGroupedResult = new Array(); 
    var GroupedResult1 = sourceResult.slice(); 
    var GroupedResult1234 = GroupedResult1.filter(function (v) { return v[groupColumnName] == RegisterName }); 

    $.each(GroupedResult1234, function (index, item) { 
     var itemResult = new Array(); 
     itemResult = pGroupedResult.filter(function (value) { return value["shiftNo"] == item["shiftNo"] }); 
     if (itemResult.length > 0) { 
      itemResult[0].ItemCount++; 
      itemResult[0].opnAmt += parseFloat(item["opnAmt"]); 
      itemResult[0].ClsAmt += parseFloat(item["ClsAmt"]); 
      itemResult[0].Total += parseFloat(item["Total"]); 
      var itemmm = itemResult[0].GroupedPaymentDetails; 
      $.each(itemResult[0].GroupedPaymentDetails, function (indexIn, itemIn) { 
       itemResult[0].GroupedPaymentDetails[indexIn]["PaidAmount"] += parseFloat(item["PaymentDetails"][indexIn]["PaidAmount"]); 
      }); 
     } else { 
      var newItemObj = new Object(); 
      newItemObj.ItemCount = 1; 
      newItemObj.shiftNo = item["shiftNo"]; 
      newItemObj.RegisterName = item["RegisterName"]; 
      newItemObj.opnAmt = parseFloat(item["opnAmt"]); 
      newItemObj.ClsAmt = parseFloat(item["ClsAmt"]); 
      newItemObj.GroupedPaymentDetails = new Array(); 
      newItemObj.GroupedPaymentDetails = item["PaymentDetails"].slice(); 
      newItemObj.Total = parseFloat(item["Total"]); 



      pGroupedResult.push(newItemObj); 
     } 
    }); 
    return pGroupedResult; 
}; 

第一次它给了我一个正确的结果,但也是新的数据更新到我原来的JSON。如何防止更新?

回答

2

您可以使用jQuery.extend()

var ParsedJson = jQuery.extend(true, {}, YOUR_JSON); 
+0

喜武士,我已经使用过了,但面临同样的问题。主要的问题是它更新了PaymentDetails的数据,这是您可以看到的每个班次中的另一个数组。 –

+0

终于这对我有用,当我在我的PaymentDetails数组中使用你的方法,如newItemObj.GroupedPaymentDetails = jQuery.extend(true,{},item [“PaymentDetails”]); //项[ “PaymentDetails”]; –