Javascript Jquery更改原始数组中的值

Javascript Jquery更改原始数组中的值,javascript,jquery,arrays,object,data-binding,Javascript,Jquery,Arrays,Object,Data Binding,我建立了一个简单的购物车 首先,我有一个称为凭单的项目数组,如: "[{"id":"108","name":"Gourmet Tasting Menu for Two","price":"85.00","photo":"1102/KtOdtlg.jpg"},{"id":"109","name":"Sampler Menu for Two","price":"60.00","photo":"1102/YrLaHlg.jpg"},{"id":"127","name":"£100

我建立了一个简单的购物车

首先,我有一个称为凭单的项目数组,如:

"[{"id":"108","name":"Gourmet Tasting Menu for Two","price":"85.00","photo":"1102/KtOdtlg.jpg"},{"id":"109","name":"Sampler Menu for Two","price":"60.00","photo":"1102/YrLaHlg.jpg"},{"id":"127","name":"£100 Gift Voucher","price":"100.00","photo":"1102/qexxflg.jpg"}]"
cart=[]

现在,我有了一个将项目添加到购物车阵列的功能:

//with this function based on ID I find object into vouchers array and push that into CART array


    function addItemToCart (id) {
        qty = $('#qty').val();
        var data = $.grep(vouchers, function(e){ return e.id == id; });
        data = data[0];
        data.voucher_id = id;
        data.to = $('#to').val();
        data.from = $('#from').val();
        data.isGift = 0;
        data.recipient_email = $('#recipient_email').val();
        if (data.recipient_email != '') {
            data.isGift = 1;
        }
        data.message = $('#message').val();
        data.qty = qty;
        data.total = qty*data.price;
        cart.push(data);

    };
这很有效,可以将项目添加到购物车中,但也可以更改凭证数组中的值。为什么?为什么将
数据.total
添加到凭证数组中的对象中


我需要数组具有不可更改的值。。。为什么我以这种方式更改值时,它会将值绑定到凭证数组中。

只需使用以下命令克隆任何类型的数组:

[].concat(data);
由于concat在某些IE浏览器中可能不起作用,您可以使用:

new_array = old_array.slice(0);
或者你可以使用

var clonedArray = JSON.parse(JSON.stringify(originalArray))

var clonedArray = $.map(originalArray, function (obj) {
                  return $.extend({}, obj);
              });

我有一个数组。。。你是说一个无效的字符串?这是字符串化的数组。你需要一个数组的深度副本。关于如何制作深度副本,你可能需要一个副本。因此,我需要更改行数据=数据[0];使用您的代码?我得到了未捕获的TypeError:data.slice不是一个函数当您使用grep时需要一个深度副本,它正在同一数组中搜索。由于引用,您正在更改原始值。但是GREP不应该更改原始数组吗?