jQuery更改原始数组的值

时间:2018-10-05 15:07:41

标签: 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 Gift Voucher","price":"100.00","photo":"1102/qexxflg.jpg"}]"

cart = [];

现在,我具有将项目添加到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);

    };

,这很好,可以将项目添加到CART中,但也可以更改凭单数组中的值。为什么?为什么data.total被添加到凭证数组中的对象中...

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

1 个答案:

答案 0 :(得分:1)

只需克隆任何类型的阵列即可:

[].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);
              });