我需要将行分组到具有匹配订单号的表中,然后遍历分组。
我有这个代码工作,它创建了完美的数组,数据方式:
var multItems = [];
//combine items under orders,
$('tr.order').each(function(){
var orderNum = $(this).find('.ordernumber').val();
if ( ($('tr.order .ordernumber[value="'+orderNum+'"]').length > 1 ) && !(orderNum in multItems) ){
$('tr.order .ordernumber[value="'+orderNum+'"]').each(function(){
if (!(orderNum in multItems)){
multItems[orderNum] = [];
}
multItems[orderNum].push(this);
});
}
});
//create new tr with order totals (of each item)
for (var i = multItems.length - 1; i >= 0; i--) {
//code
};
但它创建了一个长度为0的数组,显然,multItems
= []
但multItems[orderNumber]
已定义..如果我不这样做,则无法访问它知道订单号。我可以单独制作一个订单号的数组,但感觉它必须是很长的路。如果我只是创建一个带编号的数组,我如何知道将订单中的项目弹出哪个数字?
答案 0 :(得分:2)
使用您当前的代码
var orderNum = $(this).find('.ordernumber').val();
其中val()返回一个字符串而不是一个数字。所以当你做multItems[orderNum]
时,它是一个字符串。
要使当前代码生效,您需要使用for in循环。
for (var prop in multItems) {
if( multItems.hasOwnProperty( prop ) ) {
console.log(multItems[prop]);
}
}
仅供参考:订单无法保证。此外,您应该使用对象{}
而不是此处的数组。
现在你可以做的另一件事是使用parseInt将字符串更改为一个数字,而不是神奇地你的for循环开始工作。 [这假设订单号是一个数值]
var orderNum = parseInt($(this).find('.ordernumber').val(), 10);