0

注文番号が一致するテーブルから行をグループ化し、グループ化を繰り返す必要があります。

私はこのコードが機能しており、データに関して完璧な配列を作成しています:

    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]定義されています...注文番号がわからない場合は、それにアクセスする方法がありません。

注文番号の配列を個別に作成することもできますが、それは長い道のりに違いないと感じています。番号付きの配列を作成するだけの場合、注文からアイテムをポップする番号をどのように知ることができますか?

4

1 に答える 1

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

参考までに: 注文は保証されません。{}また、ここでは配列ではなくオブジェクトを使用する必要があります。


もう 1 つできることは、parseInt を使用して文字列を数値に変更することです。そうすれば、魔法のように for ループが機能し始めます。[これは ordernumber が数値であると仮定しています]

var orderNum = parseInt($(this).find('.ordernumber').val(), 10);
于 2013-03-25T21:41:36.570 に答える