如何覆盖数组中的对象属性?

时间:2013-06-07 18:54:49

标签: javascript oop object

我想用数据覆盖某些allOrders [i],类似于我创建新数据的方式。出于某种原因,我无法弄清楚要搜索的内容。

我有一个对象数组allOrders。

我有一个对象BusinessCard。我使用表单字段,serialize()它们,用正则表达式清理数据,然后将它们推入数组。

allOrders.push(new BusinessCard(currentOrder.quantity, currentOrder.FullName, currentOrder.Title, currentOrder.CellNumber, currentOrder.OfficeNumber, currentOrder.FaxNumber, currentOrder.EmailAddress, currentOrder.Address, currentOrder.website, currentOrder.price));

我已经尝试过搜索覆盖数组中的现有对象属性等等,但还没弄清楚该怎么做。

我最好的猜测是allOrders [i] .push - 但在我看来,我必须编写一个新函数来替换对象中的每个属性。

现在我正在使用(因为在表单输入上使用serialize()对我没有帮助:

allOrders[i].quantity = $('#bcQuantity').val();
allOrders[i].fullname = $('#fullName').val();
allOrders[i].title = $('#Title').val();
allOrders[i].cell = $('#CellNumber').val();
allOrders[i].office = $('#OfficeNumber').val();
allOrders[i].fax = $('#FaxNumber').val();
allOrders[i].email = $('#EmailAddress').val();
allOrders[i].address = $('#Address').val();
allOrders[i].website = $('#website').val();
allOrders[i].price = $('#bcCostBeforeCart').text();

必须有一种更聪明的方法来做到这一点。谢谢。

编辑:

function getFormData(formId) {
    var currentForm = '#' + formId;
    var currentPrice = $('#bcCostBeforeCart').text();
    var currentFormData = $(currentForm).serialize();
    var currentFormDataFinal = currentFormData + '&price=' + currentPrice;
    return JSON.parse('{"' + decodeURI(currentFormDataFinal.replace(/\+/g, " ").replace(/&/g, "\",\"").replace(/=/g, "\":\"")) + '"}');
}

意思是我可以使用     currentOrder = getFormData('businessCardForm'); 然后     allOrders [i] = currentOrder;

1 个答案:

答案 0 :(得分:5)

很奇怪您将使用您正在使用的选择器更新所有项目,但我会结束获取更新的订单信息,然后您可以通过循环运行。

根据您的输出,只要它输出订单对象的相应属性和值,您就可以这样做:

for(int i =0; i < allOrders.length; i++){
   var currentFormId = '' // update this for each iteration.    
   allOrders[i] = getFormData(currentFormId);
} 




allOrders[i] = getUpdatedOrder();

function getUpdatedOrder() {
   var order = {};
   order.quantity = $('#bcQuantity').val();
   order.fullname = $('#fullName').val();
   order.title = $('#Title').val();
   order.cell = $('#CellNumber').val();
   order.office = $('#OfficeNumber').val();
   order.fax = $('#FaxNumber').val();
   order.email = $('#EmailAddress').val();
   order.address = $('#Address').val();
   order.website = $('#website').val();
   order.price = $('#bcCostBeforeCart').text();
   return order;
}