如何";捆绑;将两个javascript函数合并为一个,而只有选择器和要调用的函数不同?

如何";捆绑;将两个javascript函数合并为一个,而只有选择器和要调用的函数不同?,javascript,jquery,function,optimization,Javascript,Jquery,Function,Optimization,我在代码段中有以下函数调用者: // del if ( maxDelivery > 0 ) { if ( maxDelivery === 1 ){ delAdressFunc( dels ); } else { for ( i = 0; i < maxDelivery; i += 1 ){ delAdressFunc( dels[i] ); } } } // ajax if ( maxA

我在代码段中有以下函数调用者:

// 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 )
        }
    }
}
我需要确保函数在每个元素上只被调用一次,因此我正在过滤
jqmData(“绑定”)
并在
deladresfunc()
中将其设置为true

因此,它可能是0、1(最有可能)或2+元素。同样适用于
ajx
maxAjaxTables
(=ajx.length)

函数调用方(obj、max、func){
如果(最大值>0){
如果(最大值===1){
func(obj);
}否则{
对于(i=0;i
只需将变化的变量(例如,
maxAjaxTables
ajx
getAjaxTable
)作为参数传递给函数即可。这个问题更适合IMO。这里有点复杂,因为争论的数量不同。但是您可以使用
.apply
(或者让
delAddressFunc
也接受索引)。另外,让第二个循环从
0
运行并删除
-1
会更干净。
dels
变量是如何设置的?(为什么它有时是数组,有时不是?)对于
ajx
。。。您可以删除
if(maxtelivery>0){
测试,因为(没有它)如果
maxDelivery
0
则它将转到
for
语句而不执行任何操作。因此
dels
要么是某种类型的对象,要么是此类对象的数组?如果它始终是数组,则更易于使用。编辑。请参见上文(1分钟内)
dels = $('.selectDeliveryAdress').filter(function() { return $(this).jqmData("bound") !== true; });
maxDelivery = dels.length;
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);