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不应该更改原始数组吗?