0

スニペットに次の関数呼び出し元があります。

// del
if ( maxDelivery > 0 ) {
    if ( maxDelivery === 1 ){
        delAdressFunc( dels );
    } else {
        for ( i = 0; i < maxDelivery; i += 1 ){
            delAdressFunc( dels[i] );
        }
    }
}

// ajax
if ( maxAjaxTables > 0 ){
    if ( maxAjaxTables === 1 ){
        getAjaxTable( ajx, 0 );   
    } else {
        for ( j = 1; j <= maxAjaxTables; j += 1){
            getAjaxTable( ajx[j-1], j )
        }
    }
}

したがって、セットアップは両方の関数呼び出しでほとんど同じです。

質問:
重複するコードを節約するために、両方を単一の「呼び出し元」に結合する方法はありますか?

ありがとう!

編集:
省略して申し訳ありません...delsそしてajx、私は次のように構築している両方の要素セレクターです:

dels = $('.selectDeliveryAdress').filter(function() { return $(this).jqmData("bound") !== true; });
maxDelivery = dels.length;

関数が各要素で 1 回だけ呼び出されるようにする必要があるため、 でフィルタリングしjqmData("bound")て true に設定していますdelAdressFunc()

したがって、0、1 (最も可能性が高い)、または 2+ 要素のいずれかになります。ajxand maxAjaxTables(= ajx.length ) も同様

4

1 に答える 1

1
function caller(obj, max, func) {
    if ( max > 0 ) {
        if ( max === 1 ){
            func( obj );
        } else {
            for ( i = 0; i < max; i += 1 ) {
                func( obj[i] );
            }
        }
    }
}

caller(dels, maxDelivery, delAdressFunc);
caller(ajx, maxAjaxTables, getAjaxTable);
于 2012-11-18T21:05:41.777 に答える